Egitura konkretuko hitzak bilatuko dituen programa eskatu digute esperimentu linguistiko baterako. Adibidez: K B K B idatziz gero, Kontsonantea-Bokala-Kontsonantea-Bokala egitura duten hitzak bilatu beharko lituzke programak: pala, sute, pila, etab.
Sarrerako datu gisa, hitz-egitura eta bilaketa-fitxategia behar ditugu, horiek programan jasotzeko bi bide ezberdin erabiliko ditugularik: patroiaren egitura komando-lerroaren bitartez, letra larriz eta letren artean hutsune bat utziz, modu honetan: B K B (Bokala-Kontsonantea-Bokala). Bilaketa-fitxategia, berriz, programak berak eskatuko du abiatzean.
Programaren dei posible bat hauxe litzateke:
>perl egitura.pl K B K K B
Zein fitxategitan egingo dut bilaketa?
xuxen.txt
bable
bafle
balbe
…
zurtu
Zutza
zuzki
>
Programak bi egiteko nagusi dauzka:
1. Komando-lerrotik jasotako egiturarekin bilaketa-patroia eraiki.
2. Sarrera estandarretik jasotako fitxategian bilaketak egin.
Algoritmoa:
1. Komando-lerrotik jasotako egiturarekin patroia eraiki
1.1. Jasotako $arg argumentu bakoitzeko
1.1.1. Baldin $arg berdin “K” orduan
$patroia patroiari kontsonantea gehitu
1.1.2. Bestela, baldin $arg berdin “B” orduan
$patroia patroiari bokala gehitu
1.1.2. Bestela bistaratu “argumentu okerra”
2. Sarrera estandarretik jasotako fitxategian bilaketak egin
2.1. Teklatutik jasotako fitxategia ireki
2.2. Fitxategiaren $lerro lerro bakoitzeko
2.2.1. Baldin ($lerro =~ /$patroia/i) orduan
bistaratu $lerro
2.3. Fitxategia itxi
Programa:
egitura.pl
#!/usr/bin/perl
use warnings;
use strict;
my $konts = “[bcdfghjklmnñpqrstvwxz]”; # kontsonanteak
my $bok = “[aeiou]”; # bokalak
my $patroia = “b”; # hasieratu patroia hitz-mugarekin
foreach my $arg (@ARGV) {
if ($arg eq “B”) {
# kateatu bokala patroiari
$patroia = $patroia . $bok;
}
elsif ($arg eq “K”) {
# kateatu kontsonantea patroiari
$patroia = $patroia . $konts;
}
else {
die(“Patroi egitura okerran”);
}
}
$patroia = $patroia . “b”; # hitz-muga kateatu bukaeran
print(“Zein fitxategitan egingo dut bilaketa?n”);
my $fitx = <STDIN>;
open(FITX, $fitx) or
die(“Ezin $fitx fitxategia zabaldu!n”);
my $lerroa;
while ($lerroa = <FITX>) {
# i modifikatzailea: letra larri/xehe bereizketarik ez
if ($lerroa =~ /$patroia/i) {
# bat egiten duen string puska soilik bistaratu
print(“$&n”);
}
}
close(FITX);
Jaitsi egitura.pl fitxategia