Coding anslutningar i Perl (3 / 5 steg)
Steg 3: Bygga modulen
Så låt oss se vad vi lärt oss i den enkla modellen och kombinera den med listan metoder att skapa en återanvändbar modul. Pairwise.pm filen bifogas innehåller den körbara koden.
En modul struktur är följande:
- lägga till platsen för modulen i listan sökväg
- Detta görs efter på den första raden med - jag. /
- . / antar modulen finns i samma katalog som skriptet
- Lägg till rad "använda parvisa;"
- Obs paketnamnet, filnamn av modulen valdes för att matcha
Teststubs_pairwise.pl innehåller en rinnande version av dessa exempel:
#! / usr/bin/perl - jag. / < br > Använd strikt;
Använd Data::Dumper;
använda pairwise;
##################
teststub1();
teststub2();
teststub3();
teststub4();
##################
#teststubs anges här
Testfall 1: Vem är med mig.
Munkar är allvarlig affär om du vill att din beskärda del.
Ingenting säger vi ta munkar på allvar som automatisera en uppmaning till handling.
I det första exemplet kommer vi att bygga kartan kontakta föreningen & och skapa en uppmaning till handling.
Koden
sub-teststub1 {< br > print "teststub1\n";
min $kvp1 = pairwise -> new();
$kvp1 -> addkvp ("Tchad", "locust team");
$kvp1 -> addkvp ("Mike", "locust team");
$kvp1 -> addkvp ("Dave", "locust team");
$kvp1 -> addkvp ("Jon", "locust team");
$kvp1 -> addkvp ("Tchad", "volontär");
$kvp1 -> addkvp ("Jon", "volontär");
$kvp1 -> addkvp ("Steve", 'Medborgaren Forester');
$kvp1 -> addkvp ("Dave", "Musik Fan");
# Skriv ut Dumper $kvp1;
Skriv ut $kvp1 -> map2str(). "\n";
$kvp1 -> invertkvp();
Skriv ut $kvp1 -> map2str(). "\n";
min $locust_team = $kvp1 -> getvalue ("locust team");
skriva ut "locust team montera! ATTN: ". Join ("",. "\n";
hemkomst.
}
Utgång (dessa munkar inte en chans!)
teststub1
Dave, 1, musik Fan
Dave, 1, locust team
Jon, 1, locust team
Jon, 1, volontär
Mike, 1, locust team
Tchad, 1, locust team
Tchad, 1, volontär
Steve, 1, medborgaren Forester
Musikälskare, 1, Dave
Locust team, 1, Dave
Locust team, 1, Mike
Locust team, 1, Jon
Locust team, 1, Tchad
Medborgaren Forester, 1, Steve
volontär, 1, Jon
volontär, 1, Tchad
Locust team montera! ATTN:Dave Mike Jon Chad
Testfall 2: 1 potatis 2 potatis...
Vi kan ta reda på om det finns mer än 1 potatis
Koden
sub-teststub2 {< br > print "teststub2\n";
min $kvp1 = pairwise -> new();
$kvp1 -> addkvp ('potato1', 'röd');
$kvp1 -> addkvp ('potato2', 'blå');
$kvp1 -> addkvp ('potato1', 'blå');
$kvp1 -> addkvp ('potato1', 'röd');
$kvp1 -> addkvp ('potato2', 'blå');
$kvp1 -> addkvp ('potato3', 'röd');
$kvp1 -> addkvp ('potato4', 'röd');
$kvp1 -> addkvp ('potato4', 'röd');
#print $kvp1 -> map2str(). "\n";
$kvp1 -> invertkvp();
#print $kvp1 -> map2str(). "\n";
#Mr potatis imitatörer...
min $redpotatos = $kvp1 -> getvalue('red');
om (skalär (gt '1') {
skriva ut "mer än 1 röd potatis här \n";
} annat {
skriva ut "ingenting är här... flytta längs \n";
}
}
Utgång (Tillkännagivande storleken på matrisen ger en indikation av länk styrka)
teststub2
Mer än 1 röd potatis här
Testfall 3: Jakten på den röda potatisen
I logik finns det ett koncept av . Modus Tollens. MT kokar ner "förneka därav."
Sade en annan väg, om p antyder q och q inte har då du inte har p
Vi kommer att använda detta som en del av en process för eliminering för att hitta den sanna---uhhh---röd potatis.
Koden
sub teststub3 {
skriva ut "teststub3\n";
min $kvp1 = pairwise -> new();
$kvp1 -> addkvp ('potato1', 'blå');
$kvp1 -> addkvp ('potato2', 'röd');
$kvp1 -> addkvp ('potato1', 'röd');
$kvp1 -> addkvp ('potato1', 'blå');
$kvp1 -> addkvp ('potato2', 'röd');
$kvp1 -> addkvp ('potato3', 'blå');
$kvp1 -> addkvp ('potato4', 'blå');
$kvp1 -> addkvp ('potato4', 'blå');
Skriv ut "från och med: \n";
Skriv ut $kvp1 -> map2str(). "\n";
$kvp1 -> invertkvp();
min $bluelist = $kvp1 -> getvalue('blue');
foreach () mitt $tot
$kvp1 -> removekey($tot);
Print "ta bort $tot från consideration\n";
}
skriva ut "Modus Tolens inte blå: \n";
Skriv ut $kvp1 -> map2str(). "\n";
}
Utgång (Observera trots flera associativa länkar, potatis med blå föreningar togs bort i 1 steg)
Mer än 1 röd potatis här < br > teststub3
börjar med:
potato4, 2, blå
potato2, 2, röd
potato3, 1, blå
potato1, 2, blå
potato1, 1, röd
ta bort potato4 från behandling
ta bort potato3 från behandling
ta bort potato1 från behandling
Modus Tolens inte blå:
potato2, 2, röd
Testfall 4: Histogram & hitta skärningspunkter
Så om värdena representerar en koordinat för en specifik nyckel, kan det vara möjligt att fastställa korsningar
Kod:
sub-teststub4 {< br > print "teststub4 hitta interesection av definierade points\n";
min $kvp1 = pairwise -> new();
$kvp1 -> addkvp ("wire1", "2,1");
$kvp1 -> addkvp ('wire1', '2,2');
$kvp1 -> addkvp ('wire1', '2,3');
$kvp1 -> addkvp ('wire1', '2,4');
$kvp1 -> addkvp ('wire1', '2,4');
$kvp1 -> addkvp ('wire2', '4,2');
$kvp1 -> addkvp ('wire2', '3,2');
$kvp1 -> addkvp ('wire2', '2,2');
$kvp1 -> addkvp ("wire2", "1,2");
Skriv ut "från och med: \n";
Skriv ut $kvp1 -> map2str(). "\n";
$kvp1 -> invertkvp();
min $multi = $kvp1 -> nonuniqkeys();
skriva ut "nonuniqkeys returnerar en hash av nycklar med flera föreningar / overlaps\n". Dumper $multi;
$multi = $kvp1 -> nonuniqkvp();
Skriv ut "nonuniqkeys returnerar en hash av kvp definieras flera gånger \n". Dumper $multi;
}
Produktion: (Observera att fältet innehåller kommatecken och separatorn är som standard ett kommatecken. Detta illustrerar hur tokenizing kan göras mer komplicerat. Seperator funktionen kan användas för att ändra vad metoden map2str ansluter fälten på... Alternativt kunde man strategiskt dra nytta av situationen. I båda fallen kan konsekvent repeterbara genomförande utvecklaren att förstå och arbeta med beteendet. )
teststub4 att hitta skärningspunkten mellan definierade punkter < br > börjar med:
wire1, 1, 2, 3
wire1, 1, 2, 2
wire1, 2, 2, 4
wire1, 1, 2, 1
wire2, 1, 3, 2
wire2, 1, 1, 2
wire2, 1, 4, 2
wire2, 1, 2, 2
nonuniqkeys returnerar en hash av nycklar med flera föreningar / överlappar
$VAR1 = {
"2,2" = > {
'wire1' = > 1,
'wire2' = > 1
}
};
nonuniqkeys returnerar en hash av kvp difined flera gånger
$VAR1 = {
"2,4" = > {
'wire1' = > 2
}
};