Perlben hogyan lehet a tartalmazó folder összes folderét kilistázni (azaz azokat, amik a script mellett vannak), avagy egy tömbbe rakni?
#!/usr/bin/perl
use strict;
use warnings;
my $dir = $ARGV[0]; # target dir is read from command line.
opendir(my $DIR, $dir) or die $!;
while (my $file = readdir($DIR)) {
# We only want folders:
next unless (-d "$dir/$file");
print "$file\n";
}
Arra jo a my $dir = "." (linux/unix/osx alatt biztosan mukodik, windows alatt nem probaltam)
Ha esetleg nem mukodik, akkor probald ezt:
use Cwd;
my $dir = getcwd;
(a Cwd modul benne van a Perl alapertelmezett moduljai kozott, szoval biztosan mukodni fog.)
valamiért nem működik nekem:
use Cwd;
use strict;
#use warnings;
$current_directory = getcwd;
az alábbi hibaüzenetet adja:
Global symbol "$current_directory" requires explicit package name at script1.pl line 7.
Execution of script1.pl aborted due to compilation errors.
de nincsen hiba, ha kihagyom a use strict;-et, csakhogy arra szükség lenne
ezzel a sorral bajom volt, de végre működik:
next unless (-d "$dir/$file");
szerintem az idézőjel nem kell bele
Viszont van még egy probléma, hogy a . és .. -ot is directorynak veszi, amit én nem szeretnék listáznihogyan lehetne ettől megszabadulni?
"lehet hogy a my kell mindenhova, de miért?"
Ha use strict; pragma alatt programozol, akkor minden változó első használatkor deklarálni kell, hogy globális (our) vagy lokális (my). Ha nem használod a strict-et, akkor a my nélkül létrehozott változók globálisak. Jótanács: perl egysorosakat leszámítva MINDEN programot use strict, és use warnings-al kezdj. Rengeteg szívást spórolhatsz meg.
A . és a .. konvenciók, amivel minden rendszerben találkozni fogsz. Úgy tudsz tőlük megszabadulni, hogy pl:
print "$dir\n" unless $dir eq "." or $dir eq ".."
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!