|
|||||||||||||||||||||||||||
Jeg siger mange, og prøver det i aften.
Ole Tange wrote:
> 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 benytter ActivePerl på Windows (NT og 95), og den har
perlglob, både i bat- og exe-version, så det ser jeg på.
> > 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
Denne tabel viser præcis hvad jeg gjorde galt, så det skal jeg også have
på plads.
> 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
Det vil vise sig, om jeg tager udfordringen op; bøvl kan være meget
inspirerende, men også trættende ;=)
mvh
Jan
|
||||||||||||||
|
||||||||||||||