Frage zu glob

Frage zu glob

am 22.03.2007 10:47:09 von Ferry Bolhar

Hallo, liebe Leute,

ich verwendet die glob() Funktion (und damit eigentlich File::Glob)
und bin fast ganz glücklich. Auf meinem Entwicklungsrechner habe
ich Perl 5.8.6 und folgendes Skript (auszugsweise):

use File::Glob ':nocase';

my $DIR = '/usr/WEBCheck/chars/';
my $name = $ARGV[0] || '*';

my @files = glob "$DIR/$name" or
die "No (matching) files found!\n";

Nehmen wir an, es gibt zwei Datei namens

/usr/WEBCheck/chars/elak.data
/usr/WEBCheck/chars/Elak.m33data

so bekomme ich bei der Eingabe 'elak*' richtig beide Dateinamen
in @files zurück (ich hatte ja als Flag ':nocase' angegeben).

Lasse ich dasselbe Skript aber auf unserem Produktionssystem
mit Perl 5.8.0 laufen, bekomme ich (es sind natürlich auch dort
beide Dateien vorhanden) nur

/usr/WEBCheck/chars/elak.data

zurück. Die Datei mit dem 'E' am Beginn sehe ich nur, wenn ich
als Suchmuster 'Elak*' angebe, dann kommt aber die mit dem
kleinen "e" nicht mehr. Kurz gesagt, das ':nocase' Flag wird unter
5.8.0 scheinbar ignoriert.

Hat jemand ähnliche Erfahrungen gemacht und vor allem einen
Lösungsvorschlag? File::Glob ist ein Modul der Core-Distribution;
kann man trotzdem die Version von 5.8.6 oder 5.8.8 installieren?
Ein Update von Perl selbst auf 5.8.8 ist auf dem Produktions-
system derzeit leider kein Thema.

Welche Möglichkeiten habe ich?

Schönen Dank und liebe Grüße aus Wien,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Frage zu glob

am 22.03.2007 16:29:55 von Frank Seitz

Ferry Bolhar wrote:

> Hat jemand ähnliche Erfahrungen gemacht und vor allem einen
> Lösungsvorschlag?

Ich hab's grad ausprobiert und es funktionuckelt (5.8.6).

> Welche Möglichkeiten habe ich?

Eine simple Fehlerquelle, die mir einfällt:
Hast Du den Pattern beim Aufruf gequotet? Wenn nein,
expandiert die Shell den *. Die macht es case-insensitiv.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Frage zu glob

am 22.03.2007 16:32:37 von Frank Seitz

Ferry Bolhar wrote:

> Hat jemand ähnliche Erfahrungen gemacht und vor allem einen
> Lösungsvorschlag?

Ich hab's grad ausprobiert und es funktionuckelt (5.8.6).

> Welche Möglichkeiten habe ich?

Eine simple Fehlerquelle, die mir einfällt:
Hast Du den Pattern beim Aufruf gequotet? Wenn nein,
expandiert die Shell den *. Die macht es case-sensitiv.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Frage zu glob

am 22.03.2007 20:44:17 von Slaven Rezic

"Ferry Bolhar" writes:

[...}
> Hat jemand ähnliche Erfahrungen gemacht und vor allem einen
> Lösungsvorschlag? File::Glob ist ein Modul der Core-Distribution;
> kann man trotzdem die Version von 5.8.6 oder 5.8.8 installieren?
> Ein Update von Perl selbst auf 5.8.8 ist auf dem Produktions-
> system derzeit leider kein Thema.
>
> Welche Möglichkeiten habe ich?
>

opendir/readdir und ein bisschen Handarbeit anwenden. Ist nicht viel
schlimmer als glob().

--
Slaven Rezic - slaven rezic de

tksm - Perl/Tk program for searching and replacing in multiple files
http://ptktools.sourceforge.net/#tksm

Re: Frage zu glob

am 23.03.2007 10:26:38 von Ferry Bolhar

Frank Seitz:

> Eine simple Fehlerquelle, die mir einfällt:
> Hast Du den Pattern beim Aufruf gequotet? Wenn nein,
> expandiert die Shell den *. Die macht es case-sensitiv.

Ich ruft - im konkreten Problemfall - einfach

my @files = glob $pattern;

auf, und $pattern enthält

"/usr/WEBCheck/chars/Elak*",

das ich bei der Eingabe in der Befehlszeile natürlich gequoted
habe.

Außerdem funktioniert es ja unter 5.8.6 (und höher), aber
eben nicht unter 5.8.0. Die Shell ist in beiden Fällen die bash,
aber ich glaube nicht, dass das hier eine Rolle spielt, denn
deren Expansionsmechanismus kommt durch das Quoten
hier ja nicht zum Tragen.

Dennoch danke für den Tipp & LG,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Frage zu glob

am 23.03.2007 10:34:28 von Ferry Bolhar

Slaven Rezic:

> opendir/readdir und ein bisschen Handarbeit anwenden. Ist nicht viel
> schlimmer als glob().

Naja, da kann ich dann gleich einen Ersatz als CORE::glob()
bereitstellen. Klar geht das auch, aber ich hatte eben gehofft,
eine aktuellere Version von File::Glob in mein privates Verzeichnis
installieren und dieses mittels "use lib" einbinden zu können (ich
habe auf dem Produktionsrechner keine root-Rechte). Aber
File::Glob ist, da es zur Standard-Distribution gehört, als einzelnes
Modul nicht installierbar - eigentlich eine störende und IMHO
unnötige Einschränkung.

Ich werd's wohl so machen wie von dir vorgeschlagen - ich
habe irgendwo schon mal den Code für ein glob, das die
Angabe des Suchmusters als regulären Ausdruck erlaubt
und opendir/readdir verwendet, gesehen. Ich denke mal,
dass ich auf diesen Code zurückgreifen werde (so ich ihn
noch finde ;-).

Danke für deine Hilfe & schöne Grüße aus Wien,

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Frage zu glob

am 23.03.2007 12:08:49 von Frank Seitz

Ferry Bolhar wrote:

> Außerdem funktioniert es ja unter 5.8.6 (und höher), aber
> eben nicht unter 5.8.0.

Oh, pardon, da habe ich nicht gründlich genug gelesen.
Aber dann ist ja klar, dass es ein Bug ist, und man braucht
nicht weiter darüber nachdenken: Anders implementieren
(z.B. wie von Slaven vorgeschlagen) oder Upgraden (würde ich
vermutlich vorziehen, dann gleich auf die
neuste Perl-Version).

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Frage zu glob

am 24.03.2007 08:44:31 von Slaven Rezic

"Ferry Bolhar" writes:

> Slaven Rezic:
>
> > opendir/readdir und ein bisschen Handarbeit anwenden. Ist nicht viel
> > schlimmer als glob().
>
> Naja, da kann ich dann gleich einen Ersatz als CORE::glob()
> bereitstellen.

Das Pattern sah nicht so aus, als ob es mehr als fünf Zeilen Code mit
opendir/readdir gebraucht hätte.

> Klar geht das auch, aber ich hatte eben gehofft,
> eine aktuellere Version von File::Glob in mein privates Verzeichnis
> installieren und dieses mittels "use lib" einbinden zu können (ich
> habe auf dem Produktionsrechner keine root-Rechte). Aber
> File::Glob ist, da es zur Standard-Distribution gehört, als einzelnes
> Modul nicht installierbar - eigentlich eine störende und IMHO
> unnötige Einschränkung.

Es gibt durchaus Module, die ein "dual-life" auf CPAN und im Core
haben. Typischerweise sind es Module, bei denen die Autoren
"schneller" als die Perl5-Porters sind, und bessere Versionen früher
zur Verfügung stellen.

Natürlich kannst du auch versuchen, File::Glob aus der
Perl-Distribution einzeln zu bauen. Wahrscheinlich wirst du etwas am
Makefile.PL schrauben müssen und eventuell XS-Konstrukte, die nur in
neueren Perl-Versionen verfügbar sind, entsprechend übersetzen.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

Visualize XML files in a Tk text widget:
http://search.cpan.org/search?mode=module&query=Tk::XMLViewe r