Frage zu readdir+push

Hallo,

kann mir jemand sagen, warum code1 funktioniert, aber der
zusammengefasste code2 nicht?
$TempShapes_folder ist etwas wie 'C:.../TempShapes/' .

Danke für Hinweise

Guenter


code1:

opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes =3D grep(/\.png$/, readdir(DIR));
closedir(DIR);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes2 =3D grep(/\.PNG$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes2);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes3 =3D grep(/\.jpg$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes3);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes4 =3D grep(/\.JPG$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes4);




code2:

opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes =3D grep(/\.png$/, readdir(DIR));
[at] File_list_TempShapes2 =3D grep(/\.PNG$/, readdir(DIR));
[at] File_list_TempShapes3 =3D grep(/\.jpg$/, readdir(DIR));
[at] File_list_TempShapes4 =3D grep(/\.JPG$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes2,
[at] File_list_TempShapes3, [at] File_list_TempShapes4);
guba [ Mi, 03 Oktober 2007 09:32 ] [ ID #1835536 ]

Re: Frage zu readdir+push

* guba [at] vi-anec.de wrote in de.comp.lang.perl.misc:
>kann mir jemand sagen, warum code1 funktioniert, aber der
>zusammengefasste code2 nicht?

>opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
> [at] File_list_TempShapes = grep(/\.png$/, readdir(DIR));
> [at] File_list_TempShapes2 = grep(/\.PNG$/, readdir(DIR));

Weil readdir nur die verbleibenden Einträge zurückliefert, und nichts
falls es keine Einträge mehr gibt. In der ersten Version umgehst du das,
weil du opendir/closedir wiederholt aufrufst, hier jedoch nicht. Siehe

% perldoc -f readdir

für die Dokumentation von readdir.
--
Björn Höhrmann · mailto:bjoern [at] hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/
Bjoern Hoehrmann [ Mi, 03 Oktober 2007 09:37 ] [ ID #1835537 ]

Re: Frage zu readdir+push

guba [at] vi-anec.de <guba [at] vi-anec.de> wrote:
> code2:
>
> opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
> [at] File_list_TempShapes = grep(/\.png$/, readdir(DIR));
> [at] File_list_TempShapes2 = grep(/\.PNG$/, readdir(DIR));
> [at] File_list_TempShapes3 = grep(/\.jpg$/, readdir(DIR));
> [at] File_list_TempShapes4 = grep(/\.JPG$/, readdir(DIR));
> closedir(DIR);
> push( [at] File_list_TempShapes, [at] File_list_TempShapes2,
> [at] File_list_TempShapes3, [at] File_list_TempShapes4);

perldoc -f rewinddir

Ich würde dir aber folgendes empfehlen:

opendir(DIR, "$TempShapes_folder")
or die "folder '$TempShapes_folder' not found: $!";
[at] File_list_TempShapes = grep(/(?:\.png|jpg)$/i, readdir(DIR));
closedir(DIR);

HTH,
-dnh

--
I didn't know it was impossible when I did it.
David Haller [ Mi, 03 Oktober 2007 22:06 ] [ ID #1835539 ]

Re: Frage zu readdir+push

David Haller:

> [at] File_list_TempShapes = grep(/(?:\.png|jpg)$/i, readdir(DIR));

Das findet auch Dateien, die z.B. mit "xxxjpg" (ohne Punkt) enden.
Daher besser

[at] File_list_TempShapes = grep /\.(?:png|jpg)$/i, readdir DIR;

Im Übrigen kann der OP seine Gründe gehabt haben, die jeweiligen
Sucherergebnisse in unterschiedlichen Arrays abzulegen (sonst hätte
er ja alle gleich in ein Array push-en können).

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Ferry Bolhar [ Do, 04 Oktober 2007 08:08 ] [ ID #1836606 ]
Perl » de.comp.lang.perl.misc » Frage zu readdir+push

Vorheriges Thema: Freizeichen in einer Zahl?
Nächstes Thema: Sonderzeichen im Format escapen?