From seitz at bzs.tu-graz.ac.at Mon Jun 2 15:45:21 2003 From: seitz at bzs.tu-graz.ac.at (Peter Seitz) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] =?ISO-8859-1?Q?Datei_bin=E4r_kopieren_=28unter_Windows=29?= Message-ID: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> (added by postmaster@webmail.tiscali.de) Hallo Gruppe, ich m?chte eine (Grafik-)Datei bin?r kopieren. Da ich nicht wei?, ob mein Programm unter Linux oder unter Windows ausgef?hrt wird m?chte ich es Betriebssystemunabh?ngig machen. Mein code unter ActiveState Perl und Windows 98: sub binarycopy { # copy binary files ($input,$output) = @_; my $buf; my $len; if (-e $input) { open (INPUT, $input) || die "Can't Open Input File $input: $!\n"; binmode (INPUT); print "\t$input... "; if (not -e $output) { open (OUTPUT, ">$output") || die "Can't Open Output File $output: $!\n"; while ($len=sysread(INPUT, $buf, 1024)) { print OUTPUT $buf; } print "done\n"; close (OUTPUT); } else { print "does already exist - not copied\n"; } close (INPUT); } } ## sub binarycopy Einige Dateien werden sauber kopiert, andere jedoch sind zerst?rt. Sie haben eine unterschiedliche L?nge. Aus dem Programming perl werde ich nicht weiter schlau. Obiges Beispiel soll im Perl cookbook zu finden sein, aber das habe ich leider noch nicht :-{ Was mache ich falsch? Ist es sinnvoll die Dateigr??e festzustellen und dann in einem Schubs die Datei zu lesen? Das k?nnte aber IMHO bei sehr gro?en Dateien das Programm auch zum Absturz bringen, oder? Etwas ratlos... With best compliments Peter Seitz -- Graz University of Technology, Austria - Fac. f. Civil Engineering mailto:seitz@bzs.tu-graz.ac.at - http://wwwbzs.tu-graz.ac.at/~seitz/ Member of the Pegasus Mail Support Group Coordinator of the Pmail Translation Process For information about translating Pegasus Mail, contact: Han van den Bogaerde or Peter Seitz at translation-coordinator@pmail.gen.nz From spaceman at foo.at Mon Jun 2 19:22:39 2003 From: spaceman at foo.at (Stefan Weiss) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Datei =?iso-8859-1?q?bin=E4r=20kopieren?= (unter Windows) In-Reply-To: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> References: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> (added by postmaster@webmail.tiscali.de) Message-ID: <200306030222.39374.spaceman@foo.at> On Monday, 02 June 2003 22:45, Peter Seitz wrote: > ich m?chte eine (Grafik-)Datei bin?r kopieren. Da ich nicht wei?, ob > mein Programm unter Linux oder unter Windows ausgef?hrt wird m?chte > ich es Betriebssystemunabh?ngig machen. perldoc File::Copy Das sollte tun, was du brauchst. hth, stefan From hjp-vienna-pm-list at hjp.at Tue Jun 3 18:45:28 2003 From: hjp-vienna-pm-list at hjp.at (Peter J. Holzer) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Datei =?iso-8859-1?Q?bin?= =?iso-8859-1?Q?=E4r?= kopieren (unter Windows) In-Reply-To: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> References: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> Message-ID: <20030603234528.GA9164@teal.hjp.at> On 2003-06-02 22:45:21 +0200, Peter Seitz wrote: > ich m?chte eine (Grafik-)Datei bin?r kopieren. Da ich nicht wei?, ob > mein Programm unter Linux oder unter Windows ausgef?hrt wird m?chte > ich es Betriebssystemunabh?ngig machen. Mein code unter ActiveState > Perl und Windows 98: > > open (INPUT, $input) || > die "Can't Open Input File $input: $!\n"; > binmode (INPUT); [...] > open (OUTPUT, ">$output") || > die "Can't Open Output File $output: $!\n"; > > while ($len=sysread(INPUT, $buf, 1024)) { > print OUTPUT $buf; > } > > > Einige Dateien werden sauber kopiert, andere jedoch sind zerst?rt. > Sie haben eine unterschiedliche L?nge. Sie werden l?nger, stimmts? Und zwar um genau so viele Bytes wie \n's enthalten sind? > Was mache ich falsch? Du hast binmode (OUTPUT); vergessen. > Ist es sinnvoll die Dateigr??e festzustellen und dann in einem Schubs > die Datei zu lesen? Kommt auf die Gr??e der Datei an. > Das k?nnte aber IMHO bei sehr gro?en Dateien das Programm auch zum > Absturz bringen, oder? Ja. hp -- _ | Peter J. Holzer | Latein ist das humanoide ?quivalent |_|_) | Sysadmin WSR | zu Fortran. | | | hjp@hjp.at | __/ | http://www.hjp.at/ | -- Alexander Bartolich in at.linux -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20030604/576a6990/attachment.bin From alfie at ist.org Wed Jun 4 04:56:33 2003 From: alfie at ist.org (Gerfried Fuchs) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Datei =?iso-8859-1?Q?bin?= =?iso-8859-1?Q?=E4r?= kopieren (unter Windows) In-Reply-To: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> References: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> Message-ID: <2003-06-04_11.56.28@alfie.ist.org> * Peter Seitz [2003-06-02 22:45]: > Was mache ich falsch? Ist es sinnvoll die Dateigr??e festzustellen und > dann in einem Schubs die Datei zu lesen? Das k?nnte aber IMHO bei > sehr gro?en Dateien das Programm auch zum Absturz bringen, oder? Nein. Ich w?rde Dir folgenden Snippet empfehlen: #v+ open (IN, $input) || die "$0: can't read from ?$input?: $!\n"; open (OUT, $output) || die "$0: can't write to ?$output?: $!\n"; my $len = (stat($input))[11]; while (sysread IN, my $data, $len) { syswrite OUT, $data }; close OUT; close IN; #v- Der Knackpunkt ist hier ?(stat($input))[11]?, wieso Du so arbeiten willst, siehst Du in ?perldoc -f stat?: 11 blksize preferred block size for file system I/O Ich h?tte noch kein Dateisystem gesehen, dass eine so riesige Blocksize bevorzugt, dass das Programm abst?rzt ;) Gegebenenfalls binmode verwenden, aber ich bin mir grad nicht sicher, ob das bei sysread/syswrite ?berhaupt notwendig ist. Ich verwende obiges Snippet, um Bilder-Dateien auf auf einer Webseite auszugeben, die nicht im Document-Root liegen (wegen Zugriffskontrolle), hab diesbez?glich keine Probleme bemerkt, und verwende hier binmode gar nicht. HTH & HAND, Alfie -- It's simply unbelievable how much energy and creativity people have invested into creating contradictory, bogus and stupid licenses... --- Sven Rudolph about licences in debian/non-free. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20030604/05e809a5/attachment.bin From hjp-vienna-pm-list at hjp.at Wed Jun 4 14:42:42 2003 From: hjp-vienna-pm-list at hjp.at (Peter J. Holzer) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Datei =?iso-8859-1?Q?bin?= =?iso-8859-1?Q?=E4r?= kopieren (unter Windows) In-Reply-To: <2003-06-04_11.56.28@alfie.ist.org> References: <3ED0C80000453006@eagle.intern.zoo.tiscali.de> <2003-06-04_11.56.28@alfie.ist.org> Message-ID: <20030604194242.GA17838@teal.hjp.at> On 2003-06-04 11:56:33 +0200, Gerfried Fuchs wrote: > Gegebenenfalls binmode verwenden, aber ich bin mir grad nicht sicher, > ob das bei sysread/syswrite ?berhaupt notwendig ist. Ich verwende obiges > Snippet, um Bilder-Dateien auf auf einer Webseite auszugeben, die nicht > im Document-Root liegen (wegen Zugriffskontrolle), hab diesbez?glich > keine Probleme bemerkt, und verwende hier binmode gar nicht. L?uft der Server unter Windows? hp -- _ | Peter J. Holzer | Latein ist das humanoide ?quivalent |_|_) | Sysadmin WSR | zu Fortran. | | | hjp@hjp.at | __/ | http://www.hjp.at/ | -- Alexander Bartolich in at.linux -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20030604/79e5c2e1/attachment.bin From domm at zsi.at Tue Jun 17 15:07:39 2003 From: domm at zsi.at (Thomas Klausner) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] YAPC::EU in Paris Message-ID: <20030617200739.GF2056@zsi.at> Hi! Wie ev eh schon alle wissen, findet von 23.-25 Juli in Paris die YAPC::EU statt: YAPC is "yet another Perl conference", with apologies to The Perl Conference. This is an inexpensive (99 for 3 days) conference with its roots in the Perl Mongers Perl users groups. YAPC is driven from the bottom up, organized by and for Perl users -- a grassroots conference. http://yapc.mongueurs.net/ Erfahrungsgemaess sind YAPC sehr lehrreiche und gleichzeitig lustige Angelegenheiten: http://www.perl.org/yapc/europe/2002/movies/ (u.a.: Schwern versteigert seine Hose, Schwern's Armdrueck-Wettbewerb mit Damian Conway,..) Bis jetzt ist neben meiner Wenigkeit noch Leo Toetsch (parrot) dabei, und Wolfgang Laun (Alcatel) (der aber soweit ich weiss hier nicht subskribiert ist). Wenn noch jemand mitkommen will (man kann sich ja von seiner/ihrer Firma bezahlen lassen (Weiterbildung und so..)), bitte melden, dann koennen wir naemlich Unterkunft und Anreise koordinieren (und ev billiger bekommen). -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From seitz at bzs.tu-graz.ac.at Thu Jun 19 19:29:35 2003 From: seitz at bzs.tu-graz.ac.at (Peter Seitz) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] =?ISO-8859-1?Q?Liste_vergr=F6=DFern_und_verkleinern?= Message-ID: <3EEEDDBC00152403@falcon.intern.zoo.tiscali.de> (added by postmaster@webmail.tiscali.de) Hallo Liste, ich habe folgende Aufgabenstellung: Zwei Verzeichnisse (neu und alt) sollen verglichen werden und die Unterschiede in einem Report zusammengefasst werden. Also * neue Dateien * gel?schte Dateien * ver?nderte Dateien Ich m?chte das mit dem File::Find::find mechanismus implementieren. F?r neue und ver?nderte Dateien sehe ich keinerlei Probleme, aber f?r gel?schte Dateien. Ich habe mir nun auf ein Array alle Dateien aus dem alten Verzeichnis abgespeichert. Also: @verzeichnis ("datei1.txt", "datei2.lst", "dir/datei4.log"); Nun w?rde ich gerne vergleichen, ob eine Datei im alten Verzeichnis vorhanden ist. Falls ja, w?rde ich den Eintrag gerne aus dem Array @verzeichnis l?schen, doch irgendwie finde ich keinen Weg das einfach zu tun. Mir scheint, als ob ich dieses Element an den Anfang oder an das Ende der Liste sortieren m??te, so da? ich es mittels shift und pop zu entfernen. Mit meiner Methode h?tte ich nach Abarbeitung aller Dateien im Verzeichnis neu im Array @verzeichnis jene Dateien, welche mittlerweile gel?scht wurden. Kann ich aus einem Array tats?chlich keinen beliebigen Eintrag l?schen, oder mu? ich meine Aufgabe anders l?sen? Ideen? With best compliments Peter Seitz -- Graz University of Technology, Austria - Fac. f. Civil Engineering mailto:seitz@bzs.tu-graz.ac.at - http://wwwbzs.tu-graz.ac.at/~seitz/ Member of the Pegasus Mail Support Group Coordinator of the Pmail Translation Process For information about translating Pegasus Mail, contact: Han van den Bogaerde or Peter Seitz at translation-coordinator@pmail.gen.nz From bernd at firmix.at Thu Jun 19 19:46:38 2003 From: bernd at firmix.at (Bernd Petrovitsch) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Liste =?ISO-8859-1?Q?vergr=F6=DFern?= und verkleinern In-Reply-To: <3EEEDDBC00152403@falcon.intern.zoo.tiscali.de> (added by postmaster@webmail.tiscali.de) References: <3EEEDDBC00152403@falcon.intern.zoo.tiscali.de> (added by postmaster@webmail.tiscali.de) Message-ID: <1056069998.14200.0.camel@gimli.at.home> On Fri, 2003-06-20 at 02:29, Peter Seitz wrote: > Nun w?rde ich gerne vergleichen, ob eine Datei im alten Verzeichnis > vorhanden ist. Falls ja, w?rde ich den Eintrag gerne aus dem Array > @verzeichnis l?schen, doch irgendwie finde ich keinen Weg das > einfach zu tun. Mir scheint, als ob ich dieses Element an den Anfang > oder an das Ende der Liste sortieren m??te, so da? ich es mittels > shift und pop zu entfernen. delete kann das lt. `man perlfunc` Bernd From BaierO at spardat.at Fri Jun 20 02:27:51 2003 From: BaierO at spardat.at (Baier Oliver INT SD) Date: Mon Aug 2 21:39:11 2004 Subject: AW: [Vienna-pm] Liste vergrößern und verkleinern Message-ID: <1FCFCFC1F0830E4D93860866CACC07B60215FED8@m0114.s-mxs.net> Hi, du koenntest auch einfach statt einem array einen hash verwenden. So kannst du per key leicht ein gezieltes Element loeschen. lg Oliver > -----Urspr?ngliche Nachricht----- > Von: vienna-pm-admin@mail.pm.org > [mailto:vienna-pm-admin@mail.pm.org]Im > Auftrag von Peter Seitz > Gesendet: Freitag, 20. Juni 2003 02:30 > An: vienna-pm@mail.pm.org > Betreff: [Vienna-pm] Liste vergr??ern und verkleinern [bayes] > > > Hallo Liste, > > ich habe folgende Aufgabenstellung: > > Zwei Verzeichnisse (neu und alt) sollen verglichen werden und die > Unterschiede in einem Report zusammengefasst werden. Also > * neue Dateien > * gel?schte Dateien > * ver?nderte Dateien > > Ich m?chte das mit dem File::Find::find mechanismus implementieren. > > F?r neue und ver?nderte Dateien sehe ich keinerlei Probleme, aber f?r > gel?schte Dateien. > > Ich habe mir nun auf ein Array alle Dateien aus dem alten Verzeichnis > abgespeichert. Also: > > @verzeichnis ("datei1.txt", "datei2.lst", "dir/datei4.log"); > > Nun w?rde ich gerne vergleichen, ob eine Datei im alten Verzeichnis > vorhanden ist. Falls ja, w?rde ich den Eintrag gerne aus dem Array > @verzeichnis l?schen, doch irgendwie finde ich keinen Weg das > einfach zu tun. Mir scheint, als ob ich dieses Element an den Anfang > oder an das Ende der Liste sortieren m??te, so da? ich es mittels > shift und pop zu entfernen. > > Mit meiner Methode h?tte ich nach Abarbeitung aller Dateien im > Verzeichnis neu im Array @verzeichnis jene Dateien, welche > mittlerweile gel?scht wurden. > > Kann ich aus einem Array tats?chlich keinen beliebigen Eintrag > l?schen, oder mu? ich meine Aufgabe anders l?sen? > > Ideen? > > > With best compliments > > Peter Seitz > -- > > Graz University of Technology, Austria - Fac. f. Civil Engineering > mailto:seitz@bzs.tu-graz.ac.at - http://wwwbzs.tu-graz.ac.at/~seitz/ > > Member of the Pegasus Mail Support Group > Coordinator of the Pmail Translation Process > > For information about translating Pegasus Mail, contact: > Han van den Bogaerde or Peter Seitz at > translation-coordinator@pmail.gen.nz > _______________________________________________ > Vienna-pm mailing list > Vienna-pm@mail.pm.org > http://mail.pm.org/mailman/listinfo/vienna-pm > From domm at zsi.at Fri Jun 20 05:01:34 2003 From: domm at zsi.at (Thomas Klausner) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Liste vergr??ern und verkleinern In-Reply-To: <3EEEDDBC00152403@falcon.intern.zoo.tiscali.de> References: <3EEEDDBC00152403@falcon.intern.zoo.tiscali.de> Message-ID: <20030620100134.GA1233@zsi.at> Hi! On Fri, Jun 20, 2003 at 02:29:35AM +0200, Peter Seitz wrote: > Ich habe mir nun auf ein Array alle Dateien aus dem alten Verzeichnis > abgespeichert. Also: > > @verzeichnis ("datei1.txt", "datei2.lst", "dir/datei4.log"); Wie Oliver schon angemerkt hat, wuerde ich da auch auf jeden Fall einen HASH verwenden, mit den Dateinamen als Keys (und ev der mtime als value, dann kannst du auch gleich checken, ob das File geaendert wurde) %verzeichnis=( 'datei1.txt'=>1, 'datei2.lst'=>1, 'dir/date4.log'=>1, ); zum loeschen dann einfach: delete $verzeichnis{'datei1.txt'}; -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From Nagy at ubavie.gv.at Fri Jun 20 05:36:40 2003 From: Nagy at ubavie.gv.at (Nagy Wilhelm) Date: Mon Aug 2 21:39:11 2004 Subject: AW: [Vienna-pm] Liste vergr??ern und verkleinern Message-ID: <6D5BF24847A0A44AB725899D3CE6CB69014C4C12@pcmail4.ubavie.gv.at> Hallo Leute, nicht dass die vorherigen methoden schlecht waehren! Habe nur ueber das Problem nachgedacht und versucht eine methode mit m?glichtst minimalen speicherbedarf zu finden (also mit der bereits vorhandenen List). Sozusagen als Fingeruebung (habe heute lauter fade programme und fade sache zu tun *g*) lg \^/ili # ### Zum Testen Liste mit 8 Dateinamen fuellen # @aFiles = (); map { push @aFiles,"file$_.txt"; } (1..8); # ### nun l?schen wir den Eintrag mit dem sch?nen Namen # 'file4.txt' (nicht das wir was besonders gegen # dieses Listenelement haetten, war halt nur zum falschen # zeitpunkt am falsch ort ... nichts pers?nliches). # @aFiles = grep {not /^file4.txt$/} @aFiles; # ### jetzt sehen wir nach obs geklappt ... # print join "\n",@aFiles; > -----Urspr?ngliche Nachricht----- > Von: Thomas Klausner [SMTP:domm@zsi.at] > Gesendet am: Freitag, 20. Juni 2003 12:02 > An: vienna-pm@mail.pm.org > Betreff: Re: [Vienna-pm] Liste vergr??ern und verkleinern > > Hi! > > On Fri, Jun 20, 2003 at 02:29:35AM +0200, Peter Seitz wrote: > > > Ich habe mir nun auf ein Array alle Dateien aus dem alten Verzeichnis > > abgespeichert. Also: > > > > @verzeichnis ("datei1.txt", "datei2.lst", "dir/datei4.log"); > > Wie Oliver schon angemerkt hat, wuerde ich da auch auf jeden Fall einen > HASH > verwenden, mit den Dateinamen als Keys (und ev der mtime als value, dann > kannst du auch gleich checken, ob das File geaendert wurde) > > %verzeichnis=( > 'datei1.txt'=>1, > 'datei2.lst'=>1, > 'dir/date4.log'=>1, > ); > > zum loeschen dann einfach: > delete $verzeichnis{'datei1.txt'}; > > > -- > #!/usr/bin/perl http://domm.zsi.at > for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} > _______________________________________________ > Vienna-pm mailing list > Vienna-pm@mail.pm.org > http://mail.pm.org/mailman/listinfo/vienna-pm From p.seitz at koehler-seitz.de Tue Jun 24 17:01:37 2003 From: p.seitz at koehler-seitz.de (Peter Seitz jun.) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] =?ISO-8859-1?Q?Re:_[Vienna-pm]_Liste_vergr=F6=DFern_und_verkleinern?= Message-ID: <3EF806BE0004D252@raven.intern.zoo.tiscali.de> (added by postmaster@webmail.tiscali.de) On Fri, 20 Jun 2003 12:36:40 +0200 Nagy Wilhelm wrote: Hallo Wilhelm, > Hallo Leute, > > nicht dass die vorherigen methoden schlecht waehren! Ich kann dem Hash der klarheit wegen auch einiges abgewinnen, auch wenn ich um den tats?chlichen Dateienvergleich nicht rumkomme, denn es k?nnte sich auch nur ein Byte ge?ndert haben und das kann ich an der Dateigr??e nicht erkennen... Somit m?chte ich auf einen tats?chlichen Dateivergleich nicht verzichten... > > Habe nur ueber das Problem nachgedacht und versucht eine > methode mit m?glichtst minimalen speicherbedarf zu finden (also > mit der bereits vorhandenen List). > > Sozusagen als Fingeruebung > (habe heute lauter fade programme und fade sache zu tun *g*) > > lg > \^/ili > > # ### Zum Testen Liste mit 8 Dateinamen fuellen > # > @aFiles = (); > map { > push @aFiles,"file$_.txt"; > } (1..8); > > # ### nun l?schen wir den Eintrag mit dem sch?nen Namen > # 'file4.txt' (nicht das wir was besonders gegen > # dieses Listenelement haetten, war halt nur zum falschen > # zeitpunkt am falsch ort ... nichts pers?nliches). > # > @aFiles = grep {not /^file4.txt$/} @aFiles; > > # ### jetzt sehen wir nach obs geklappt ... > # > print join "\n",@aFiles; Wie sieht es denn mit der Performance aus? Ich denke, ich werde so um die 300 Dateien haben. Ich brauch das Ganze zum mirrorn eines ZIP-Archivs, welches t?glich erneuert wird. Um die Unterschiede festzustellen wird es nach dem mirrorn ausgepackt und Dateiweise verglichen. [...] With best compliments Peter Seitz -- Graz University of Technology, Austria - Fac. f. Civil Engineering mailto:seitz@bzs.tu-graz.ac.at - http://wwwbzs.tu-graz.ac.at/~seitz/ Member of the Pegasus Mail Support Group Coordinator of the Pmail Translation Process For information about translating Pegasus Mail, contact: Han van den Bogaerde or Peter Seitz at translation-coordinator@pmail.gen.nz From Nagy at ubavie.gv.at Wed Jun 25 01:32:25 2003 From: Nagy at ubavie.gv.at (Nagy Wilhelm) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] =?iso-8859-1?Q?AW=3A_=5BVienna-pm=5D_Re=3A_=5BVienna-pm=5D_Lis?= =?iso-8859-1?Q?te_vergr=F6=DFern_und_verkleinern?= Message-ID: <6D5BF24847A0A44AB725899D3CE6CB69015B0EB3@pcmail4.ubavie.gv.at> [Nagy Wilhelm] Hallo Peter hallo Leser, > > Hallo Leute, > > > > nicht dass die vorherigen methoden schlecht waehren! > > Ich kann dem Hash der klarheit wegen auch einiges abgewinnen, [Nagy Wilhelm] Ich bin voellig mit dir, im allgemeinen bevorzuge ich auch hashes wegen der selbstdokumentation und der Klarheit. Obwohl eine Konstruktion wie: use constant NAME=>0; use constant STRASSE=>1; use constant PLZORT=>2; my @aPerson = (); $aPerson[NAME] = 'Koarl Posbischil'; $aPerson[STRASSE] = 'Kanakenntigasse 3'; $aPerson[PLZORT] = '1224 Kikeritspotschn'; auch nicht uneben ist ;-) Jedenfalls kann keine autovivikation stattfinden! zB. $hPerson{NANE} = 'Koarl Posbischil'; ^^^^ ---- Damit sich niemand die Augen verenkt NA(M)E != NA(N)E ;-) kann weder von use strict noch von -w erkannt werden. aber wie gesagt - ueber geschmak laesst sich NICHT streiten - ich ziehe im zweifelsfall (und ich bin fast immer im zweifel) ein hash vor! Ausser ich muss SEHR schnell sein. > Wie sieht es denn mit der Performance aus? Ich denke, ich werde so um > die 300 Dateien haben. > Arrays sind um vieles schneller. [Damian Conway; Objektorienteiert Programmieren mit Perl; Addison-Wesley; ISBN 3-8273-1812-2] Seite 175ff [Nagy Wilhelm] Bei diesen datenmengen gibt es aber IMHO keinerlei geschwindigkeitproblem ob hash oder array. Wie gesagt, mein vorschlag war lediglich eine 'fingeruebung' an einem fenstertag und ich habe mir eine ausrede gesucht, vom laestigen buerokram wegzukommen ;-))) und das auf weiterbidlung gebucht (Abrechnungsnummer 9004 ;-))) ) > > Ich brauch das Ganze zum mirrorn eines ZIP-Archivs, welches t?glich > erneuert wird. Um die Unterschiede festzustellen wird es nach dem > mirrorn ausgepackt und Dateiweise verglichen. > [Nagy Wilhelm] Habe dir mit extra post meine mirror zum 'stuerln' geschikt. Schau mal nach was du brauchen kannst. Lg \^/ili Wilhelm Nagy Umweltbundesamt GmbH. Federal Environmental Agency Austria Dept. Application Development Spittelauer Laende 5 A-1090 Wien tel: ++43-1-313 04 / 5340 mail: nagy@ubavie.gv.at http://www.ubavie.gv.at ASCII-Ribbon Campaign """"""""""""""""""""" No HTML or WORD in Mails HTML is for WEB, Word is for Microsoft. > _______________________________________________ > Vienna-pm mailing list > Vienna-pm@mail.pm.org > http://mail.pm.org/mailman/listinfo/vienna-pm From domm at zsi.at Wed Jun 25 02:21:01 2003 From: domm at zsi.at (Thomas Klausner) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Liste vergr??ern und verkleinern In-Reply-To: <3EF806BE0004D252@raven.intern.zoo.tiscali.de> References: <3EF806BE0004D252@raven.intern.zoo.tiscali.de> Message-ID: <20030625072101.GA27598@zsi.at> Hi! On Wed, Jun 25, 2003 at 12:01:37AM +0200, Peter Seitz jun. wrote: > wenn ich um den tats?chlichen Dateienvergleich nicht rumkomme, denn > es k?nnte sich auch nur ein Byte ge?ndert haben und das kann ich an > der Dateigr??e nicht erkennen... Somit m?chte ich auf einen > tats?chlichen Dateivergleich nicht verzichten... Den Dateienvergleich kannst du mit einer MD5-Checksum umgehen. Auch wenn sich ein Byte aendert, kommt dann eine andere Checksumme raus. http://search.cpan.org/author/GAAS/Digest-MD5-2.24/MD5.pm > Wie sieht es denn mit der Performance aus? Ich denke, ich werde so um > die 300 Dateien haben. Anstatt da rumzuraten: use Benchmark; http://search.cpan.org/author/JHI/perl-5.8.0/lib/Benchmark.pm > Ich brauch das Ganze zum mirrorn eines ZIP-Archivs, welches t?glich > erneuert wird. Um die Unterschiede festzustellen wird es nach dem > mirrorn ausgepackt und Dateiweise verglichen. geht das nicht auch mir rsync? -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From rs at ednet.at Fri Jun 27 09:13:46 2003 From: rs at ednet.at (rs@ednet.at) Date: Mon Aug 2 21:39:11 2004 Subject: [Vienna-pm] Perl Threads und Pipes? Message-ID: Hallo ! Liebe Gruesse, Schroettner Robert | Schroettner Robert | IT-Services | Eurodata Datenverarbeitungsdienst Ges.m.b.H. __ _ | Tel: +43-1-7747076-51 / / (_)__ __ ____ __ | +43-664-4345798 / /__/ / _ \/ // /\ \/ / | Fax: +43-1-7747076-12 /____/_/_//_/\_,_/ /_/\_\ | WWW: http://www.ednet.at TUX for President | | EURODATA - WIEN - PRAG - BRUENN - BUDAPEST - BUCAREST From rs at ednet.at Fri Jun 27 09:54:45 2003 From: rs at ednet.at (rs@ednet.at) Date: Mon Aug 2 21:39:12 2004 Subject: [Vienna-pm] Logger: Threads, STDERR und Pipes? Message-ID: Hallo ! Da mich auf der Luga hingewiesen wurde, mich doch in Perl-Fragen an die pm's zu wenden hab ich mich jetzt mal hier angemeldet *ggg* Ich hab das Problem, dass ich von (groesstenteils!) Perl Programmen STDERR abfangen, herumwurschteln und dann irgendwohin ausgeben muss. Dafuer hab ich mir schon vor laengerer Zeit ein Error-Package geschrieben, dass mir dann den STDERR-Output in ein File, auf STDERR, oder ins Syslog (auch gleichzeitig in mehrere Ziele) schreibt. Der Output kann auch waerend eines Programmlaufs wechseln: Zb. zuerst nur STDERR, dann 300x File+STDERR, und zuletzt wieder nur nach STDERR. Auch kann ich angeben wie geloggt werden soll: as-is, mit vorgesteltem Timestamp, mit Timestamp+$0+Pid, usw... Mein erster Ansatz war, dass ich mir Error:warn und Error::die-Funktionen gebaut hab, die schreiben. Problem: Manche Module (zb. DBI) rufen einfach warn auf -> mein Error-File war daher leer, und stdout nicht mehr zuordnebar (weil keine Timestamps, $0, ...). Beim System-Aufruf eines (nicht Perl) Programms bekomme ich auch nur Daten von STDERR... Also zweiter Anlauf: mit SIG{__WARN__} und SIG{__DIE__} Hooks setzen die schreiben. Problem: Was passiert wenn ich fork'e und die Handler auch in ein File loggen? 'Handler' forken dann auch und Schreiben dann beide muell ins (gleiche!) error-File??? Das Problem beim System besteht weiterhin. Dritter Ansatz: Jedesmal wenn ich den Error::output festlege, leite ich STDERR in eine Pipe um, und lasse von einem Child-Prozess (fork) die Daten formatieren und schreiben. Daten von 'system(prog)' landen so (endlich) auch im Error-File. Problem: Es gibt da so ueberaus intelligente Module (wie zb. DBI) die schliessen die DB-Handles wenn der Child terminiert. Dh, mache ich ein DBI-Handle auf, aendere dann Erorr::output (=1. Child, der dann natuerlich DBH erbt) und dann nochmal Error::output (=2. Child) dann beendet der erste Child und schliesst mir das DB-Handle. Das Verhalten koennte man zwar im Child aendern, dazu muesste ich aber dem Child alle offenen DBI-Handles uebergeben... Vierter Ansatz - Zauberwort Threads: Dupliziere STDERR, starte einen Thread der von einer Pipe liest und ins duplizierte STDERR (und File, und Syslog...) schreibt und verbiege dann STDERR in die Pipe. Problem: Wie bende ich den Thread (der einfach in einem 'while ' haengt) damit ich nich jedesmal diese 'A thread exited while 2 other threads were still running.'-Meldung bekomme? 1. Versuch: my $R : shared; my $W : shared; pipe $R $W <- "Invalid value for shared scalar" Geht nicht. Daher uebergebe ich dem Thread einfach die fileno() und mach im Thread dann ein: my $reader = new IO::Handle; $reader->fdopen($readerFileno, 'r') my $stderr = new IO::Handle; $stderr->fdopen($stderrFileno, 'w'); Dummerweise reicht dann aber ein 'close pipe' im Hauptprogramm nicht mehr aus um den Child aufzuwecken und zu beenden - oder kann man perl irgendwie dazu bewegen, ein Filehandle ueber die fileno() zu schliessen? Zetzt hab ich mir ein 'CLOSE_COMMAND' gebaut, mit dem ich den Child anweise jetzt zu benden. Diese CLOSE_COMMAND setze ich dann in einem END {}-Block auf die Pipe ab. Nich sauber, aber es finktioniert soweit mal :-( Ausserdem ist bei all den Ansaetzen immer noch das Problem ungeloest, wenn ich von mehreren Prozessen ins gleiche File schreiben will - kommt zwar noch nicht vor, werde ich daber bald brauchen :-( Ich denke mal dieses File-Problem koennte ich nur loesen, indem ich den File-Writer in einen eigenstaentigen Prozess lege (daemon) der dann ueber einen Socket angesprochen wird... Oder hab ich mich mit meiner Problemstellung voellig verrannt und ich brauche nur ein 'use GoodLikeLogger'??? Liebe Gruesse, Schroettner Robert | Schroettner Robert | IT-Services | Eurodata Datenverarbeitungsdienst Ges.m.b.H. __ _ | Tel: +43-1-7747076-51 / / (_)__ __ ____ __ | +43-664-4345798 / /__/ / _ \/ // /\ \/ / | Fax: +43-1-7747076-12 /____/_/_//_/\_,_/ /_/\_\ | WWW: http://www.ednet.at TUX for President | | EURODATA - WIEN - PRAG - BRUENN - BUDAPEST - BUCAREST From domm at zsi.at Sun Jun 29 03:55:31 2003 From: domm at zsi.at (Thomas Klausner) Date: Mon Aug 2 21:39:12 2004 Subject: [Vienna-pm] Logger: Threads, STDERR und Pipes? In-Reply-To: References: Message-ID: <20030629085531.GC14036@zsi.at> Hi! On Fri, Jun 27, 2003 at 04:54:45PM +0200, rs@ednet.at wrote: > Da mich auf der Luga hingewiesen wurde, mich doch in Perl-Fragen an die > pm's zu wenden hab ich mich jetzt mal hier angemeldet *ggg* Wilkommen! > Ich hab das Problem, dass ich von (groesstenteils!) Perl Programmen STDERR > abfangen, herumwurschteln und dann irgendwohin ausgeben muss. > ... Hmm, reichlich kompliziert. Ich wuerde da ev auch versuchen einen daemon zu schreiben und alle Log-MEssages an den zu schicken (aber andererseits arbeite ich zu 95% in Web-Umgebungen, wo das Error-Loggen etwas weniger kompliziert ist..) > Oder hab ich mich mit meiner Problemstellung voellig verrannt und ich > brauche nur ein 'use GoodLikeLogger'??? Eine kurze CPAN-Suche liefert: Tie::STDERR IO::Capture::Stderr Tye::Syslog Hab aber keines dieser Module verwendet. Rennen alle diese Programme im selben Prozess oder sind's verschiedene? Wenn alles in einem Prozess ist, koenntest du ja mit entweder mit einer globalen Variable oder irgendeinem Namespace-Trick arbeiten, um immer in dasselbe File zu loggen. Wenn's verschiedene Prozesse sind, schau dir mal das Zeugs im IPC-Namsepace an. -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/} From rs at ednet.at Sun Jun 29 18:38:20 2003 From: rs at ednet.at (Schroettner Robert) Date: Mon Aug 2 21:39:12 2004 Subject: [Vienna-pm] Logger: Threads, STDERR und Pipes? In-Reply-To: <20030629085531.GC14036@zsi.at> Message-ID: Hallo ! On Sun, 29 Jun 2003, Thomas Klausner wrote: > Hmm, reichlich kompliziert. > > Ich wuerde da ev auch versuchen einen daemon zu schreiben und alle > Log-MEssages an den zu schicken (aber andererseits arbeite ich zu 95% in > Web-Umgebungen, wo das Error-Loggen etwas weniger kompliziert ist..) > > > Oder hab ich mich mit meiner Problemstellung voellig verrannt und ich > > brauche nur ein 'use GoodLikeLogger'??? > > Eine kurze CPAN-Suche liefert: > Tie::STDERR > IO::Capture::Stderr > Tye::Syslog Wo gibts diese Module?? Das einzige was ich bei einer Suche nach 'STDERR' auf CPAN.org "The Module List" finde ist: System2 bdpfb like system(), but with STDOUT, STDERR avail Dost hab ich bisher immer gesucht und angenommen, dass dort alle Module zu finden sind - Wie ich aber gerade bemerkt habe, gibt es unter "Search Modules" noch andere Module... Aber nichts desto trotz bringen mir diese Module (zumindest lt. README) nicht wirklich was. > Hab aber keines dieser Module verwendet. > > Rennen alle diese Programme im selben Prozess oder sind's verschiedene? Ja das ist ja das nette: Die Programme verwenden gemeinsame Module (die warings schreiben wollen) und laufen teils als CGI, teils ueber cron und teils interaktiv. Und damit das ganze noch komplizierter wird, sollen einige CGI-Programme background Prozesse anwerfen die dann in gemeinsame Log-Files schreiben. Dieses gemeinsame Logging kann ich allerdings nicht ueber syslog realisieren, da ich da in einige hundert verschiedene Log-Files schreiben muss. Nur mit 'STDERR ueber Socket auf einen Daemon umleiten' wirds wohl nicht gehen, da ich einerseits den Output noch mit Timestamp, $0 und PID versehen will, und anderseits diesen modifizieren Output _auch_ nach STDERR schreiben muss. D.h. nur fuers File-Logging werde ich wohl einen Daemon brauche und den Rest im Programm erledigen muessen. Ich hab es mittlerweile soweit hinbekommen, dass ich mit einem Thread STDERR umschreibe. Leider bekomme ich noch beim beenden ein 'Scalars Leaked' und das beenden des Thread ist auch noch nicht ganz sauber (beende mittels 'CLOSE-Kommando' und nicht einfach nur durch schliessen des Filehandles) Weiss bisher nichtmal so recht, wie ich diese Meldung unterdruecken kann, da die Ausgabe erst nach Ausfuehrung meiner END{}-Bloecke kommt. Gibts vielleicht irgendwo eine brauchbare Perl-Threads-Doku? Ich denke mein Problem liegt entweder an einer falschen Deklaration/Verwendung von 'pipe' oder ': shared'. Ich mache jetzt einfach ein: my ($reader, $writer); sub ... { open $oldSTDERR, '>&STDERR' or die... pipe $reader, $writer or die ... threads->new(&\myThread, $reader, $oldSTDERR } Gebe ich $reader im Hauptprogramm und $_[0] im Thread aus, verweisen die auf verschiedene Adressen ('GLOB(0x???)'. Dh. die werden scheinbar beim erstellen des Threads dupliziert. Wird da moeglicherweise beim benenden des Threads ein angegorderetes Filehandle nicht nicht mehr freigegeben? Zusaetzlich verwenden ich einen Hash, der als ' : shared' deklariert ist, um meine Einstellungen an den Thread zu uebergeben. Dabei verwenden ich im Hauptprogramm und im Thread immer 'lock(%myConfigHash)' bevor ich vom/zum Hash lese/schreibe. Moeglicherweise gibts auch da irgendwo das Leak? Kann man irgendwie einen Memory-Dump erstellen, sodass ich irgendwie feststellen kann, was da genau Leaked? > Wenn alles in einem Prozess ist, koenntest du ja mit entweder mit einer > globalen Variable oder irgendeinem Namespace-Trick arbeiten, um immer in > dasselbe File zu loggen. Sind leider mehrere Prozesse aus mehreren Files. > Wenn's verschiedene Prozesse sind, schau dir mal das Zeugs im IPC-Namsepace > an. Ich denke, dass ich das irgendwie mit einem zentralen File-Logger Griff bekomme. Ich denke da an ein Programm, das einfach auf einen Socket hoert und dem ich den gewuenschten Filenamen uebergebe und dann die schon formatieren Fehlerzeilen schicke. Moeglicherweise laesst sich das Problem aber auch einfach mit Lock-Files loesen... Allerdings koennten sich dann meine Programme gegenseitig locken - was bei CGI's wieder zu Problemen fuehren koennte... Liebe Gruesse, Schroettner Robert | Schroettner Robert | IT-Services | Eurodata Datenverarbeitungsdienst Ges.m.b.H. __ _ | Tel: +43-1-7747076-51 / / (_)__ __ ____ __ | +43-664-4345798 / /__/ / _ \/ // /\ \/ / | Fax: +43-1-7747076-12 /____/_/_//_/\_,_/ /_/\_\ | WWW: http://www.ednet.at TUX for President | | EURODATA - WIEN - PRAG - BRUENN - BUDAPEST - BUCAREST From domm at zsi.at Mon Jun 30 04:18:22 2003 From: domm at zsi.at (Thomas Klausner) Date: Mon Aug 2 21:39:12 2004 Subject: [Vienna-pm] Logger: Threads, STDERR und Pipes? In-Reply-To: References: <20030629085531.GC14036@zsi.at> Message-ID: <20030630091822.GA26363@zsi.at> Hi! On Mon, Jun 30, 2003 at 01:38:20AM +0200, Schroettner Robert wrote: > > Eine kurze CPAN-Suche liefert: > > Tie::STDERR > > IO::Capture::Stderr > > Tye::Syslog > > Wo gibts diese Module?? Natuerlich auf CPAN. Aber: > Das einzige was ich bei einer Suche nach 'STDERR' auf CPAN.org "The Module > List" finde ist: Die Module List ist notorisch veraltet (die wird naemlich haendisch von Andreas Koenig (ein Ex-Wiener, BTW) maintaint). Ich verwende immer entweder: http://search.cpan.org oder CPANPLUS. Im CPANPLUS-Shell braucht man nur m Stderr tippen, und kriegt eine Liste aller Module, die "Stderr" im Namen haben > Ich hab es mittlerweile soweit hinbekommen, dass ich mit einem Thread > STDERR umschreibe. Leider bekomme ich noch beim beenden ein 'Scalars > Leaked' und das beenden des Thread ist auch noch nicht ganz sauber > (beende mittels 'CLOSE-Kommando' und nicht einfach nur durch schliessen > des Filehandles) > > Weiss bisher nichtmal so recht, wie ich diese Meldung unterdruecken kann, > da die Ausgabe erst nach Ausfuehrung meiner END{}-Bloecke kommt. Sorry, mit threads kenn ich mich nicht wirklich aus. Allerdings sind Threads erst in Perl 5.8. so richtig stabil und verwendbar. Was fuer eine Perl-Verison verwendest du denn? > Kann man irgendwie einen Memory-Dump erstellen, sodass ich irgendwie > feststellen kann, was da genau Leaked? Vielleicht Devel::Leak ? http://search.cpan.org/author/NI-S/Devel-Leak-0.02/Leak.pm Versuchs vielleicht mal bei Perlmonks. http://www.perlmonks.org -- #!/usr/bin/perl http://domm.zsi.at for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/}