Alexander (HH): DBI::errstr fetch() without execute()

Beitrag lesen

Moin Moin!

Mein Wrapper, soeben getestet:

UserAgent

my $ua = LWP::UserAgent->new;

den Request formal zusammenbauen

my $req = HTTP::Request->new('GET', $url, $head);

Request senden

my $res = $ua->request($req);

Response in TmpHandle schreiben

my $th = TmpHandle->new;
print $th $res->content;
$th->rewind;

ab hier kann die Sequenz bytegenau gelesen werden

  
Was zum Geier macht TmpHandle?  
  
In-Memory à la `open my $handle,'>',\$buffer`{:.language-perl}? Das gibt's schon zweimal fertig, nennt sich [IO::Scalar](http://search.cpan.org/perldoc?IO::Scalar) bzw. [IO::Stringy](http://search.cpan.org/dist/IO-stringy/) (ja, das ist mittlerweile ein einziges Paket). Prüfst Du, ob Du überhaupt genügend Speicher hast? Oder verläßt Du Dich darauf, dass Perl sich beim OS so viel realen und virtuellen Speicher holen kann, wie gerade nötig? Notfalls durch exzessives Swapping? Nach 2 bis 3 GByte ist (32-bittiges Perl vorausgesetzt) ohnehin Schluß, weil Dir die Adressbits ausgehen. Und Perl gibt keinen Speicher ans OS zurück. Selbst dann nicht, wenn Du die riesigen Variablen wieder löschst.  
  
Oder eine temporäre Datei? Auch die gibt's ferig, heißt [File::Temp](http://search.cpan.org/perldoc?File::Temp) und im Gegensatz zu selbstgefrickelten Lösungsversuchen kann man File::Temp tatsächlich SICHER benutzen, wenn man sich an die Spielregeln hält (lokales Laufwerk, nur mit Handles arbeiten, anonyme Files benutzen wenn das OS mitspielt). Ein geeignetes übersetztes Perl (mit large file support, egal ob 32 oder 64 Bit) kann Daten bis zur Größe des lokalen Dateisystems verarbeiten, auf jeden Fall mehrere TByte. Ohne dass Dir RAM und/oder Swap ausgehen. Der Haken ist, dass der Zugriff u.U. etwas langsamer ist. Wenn das OS nicht völlig merkbefreit ist, wird es Deine Arbeitsdatei ohnehin erst einmal im Cache (d.h. im RAM) halten, auch wenn es die Daten im Hintergrund in den rotierenden Rost der Festplatte meißeln läßt.  
  

> > und reißt bei unsachgemäßer Anwendung riesige Lücken.  
> Naja, mein TmpHandle muss ich auch noch verbessern.  
  
Nee, durch bewährten, getesteten und funktionierenden Code ersetzen.  
  

> > Zu neuen Modulen: [perlnewmod: Preparing the ground](http://perldoc.perl.org/perlnewmod.html#Step-by-step:-Preparing-the-ground) Diskutiere Ideen für neue Module auch mal bei [perlmonks](http://www.perlmonks.org/).  
>   
> Heut' abend...  
  
... und einige Tage länger. Diskutiere mal wirklich bis zum Ende, ob das, was Du gerade bastelst, nicht längst fertig irgendwo bei CPAN rumliegt.  
  

> > Alexander  
> Sag mal, bist du aus HH?  
  
Nö, aber seit einigen Jahren in HH.  
  
Alexander

-- 
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".