|
|||||||||||||||||||||||||||
On Wed, 17 May 2000, Jan Eggert Kofoed wrote:
> Jeg har er ved at lave Perl programmer, som skal filtrere filer, og
> dette
> skulle gerne kunne lade sig gøre ved at benytte wild cards på samme
> måde som en shell gør det. Jeg ville gerne undgå at stole på shellen,
> for nogle af mine brugere har benytter ikke bash på Windows platformen.
Da jeg skulle skrive noget perl til Windows fulgte der et program
med i perl-pakken: glob.exe. Gør der stadig det?
> Jeg kan godt få fat på filnavne (parse_dir). Hvordan checker jeg, om
> filnavnet
> opfylder regexp angivet ved wild card? For eksempel ville jeg godt kunne
>
> skrive noget i retning af
> perl -TSw jk.pl "*2*.pl"
Hvis du bruger glob.exe, kan du som første linje skrive:
@ARGV=<eval $ARGV[0]>;
Dette vil evaluere det første argument på kommandolinjen og derefter
benytte csh eller glob.exe til at expande, slutteligt putte resultatet ind
i @ARGV, så det for perl "ser ud som om" de stod på kommando linjen.
Hvis du vil have lov at skrive:
perl -TSw jk.pl "*2*.pl" abc.txt "ole?????.pl" ...
skal du ud i noget ala:
@sslug@sslug; @ARGV=();
for(@e) { push(@ARGV,<eval $_>); }
Hvis glob.exe ikke længere findes til Windows, så prøv lige at checke CPAN
om de ikke har en globbing-ting.
Hvis du absolut _vil_ regexpe, så skal du konvertere alle globbings til
regexps:
? = .
{a,bc} = (a|bc)
* = .*
[a-f] = [a-f]
tegn = \tegn
Det overlades til en øvelse til læseren at få lavet en 100% korrekt
implementation. Jeg lugter bøvl, når man skal finde ud af, om [ har en
speciel betydning: [a-f] eller ingen speciel betydning: [a-f (uden ]).
/Ole
|
||||||||||||||
|
||||||||||||||