Schrift
[thread]6409[/thread]

split in foreach? (Seite 2)

Leser: 1


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
ptk
 2004-07-19 13:11
#84565 #84565
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=jemand,18.07.2004, 11:23]seit welcher perl version nimmt man $kalare für filehandles?
ich hatte in nem buch als FH und in der selfhtmldoku als FH gelernt[/quote]
Das kann man mindestens seit 5.8.0 machen, ob's bei frueheren Versionen geht, weiss ich jetzt nicht. Vorteile: keine Namenskonflikte mehr, die man frueher mit Symbol::gensym loesen musste, und man kann sich sogar das close() sparen, da das Filehandle automatisch geschlossen wird, wenn die Referenz out-of-scope geht.
esskar
 2004-07-19 13:42
#84566 #84566
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=ptk,19.07.2004, 11:11]und man kann sich sogar das close() sparen, da das Filehandle automatisch geschlossen wird, wenn die Referenz out-of-scope geht.[/quote]
was ich aber nicht empfehlen würde...
rein vom fehühl her... :) ich könnte da nachts nicht gut schlafen :)

ansonsten sind FH's nämlich global

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;

sub fhopen
{
  open(FH, "< shift") or die;
}

fhopen("somefile.txt");
while(<FH>)
{
  print "$_\n";
}

close(FH);


ist ja in keinster Weise sauber programmiert, oder? :)\n\n

<!--EDIT|esskar|1090232866-->
pq
 2004-07-19 13:51
#84567 #84567
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=esskar,19.07.2004, 11:42]
ansonsten sind FH's nämlich global
[/quote]
ja eben, ansonsten. aber lexikalische werden automatisch geschlossen,
darauf kann man sich verlassen, deswegen wird sowas kurzes wie das
möglich:
my $data = do { open my $fh, '<', $path or die $!; local $/; <$fh> };
# oder
my @lines = do { open my $fh, '<', $path or die $!; <$fh> };

lexikalische filehandles gehen mindestens seit 5.6.0 (glaube ich)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2004-07-19 14:18
#84568 #84568
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=esskar,19.07.2004, 11:42]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;

sub fhopen
{
open(FH, "< shift") or die;
}

while(<FH>)
{
print "$_\n";
}

close(FH);


ist ja in keinster Weise sauber programmiert, oder? :)[/quote]
Mir faellt da zunaechst auf, dass fhopen nirgends aufgerufen wird und dass hinter jeder Zeile 2 Newlines ausgegeben werden...
esskar
 2004-07-19 14:27
#84569 #84569
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=betterworld,19.07.2004, 12:18]Mir faellt da zunaechst auf, dass fhopen nirgends aufgerufen wird und dass hinter jeder Zeile 2 Newlines ausgegeben werden...[/quote]
haarspalter
ptk
 2004-07-19 14:46
#84570 #84570
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=esskar,19.07.2004, 11:42][quote=ptk,19.07.2004, 11:11]und man kann sich sogar das close() sparen, da das Filehandle automatisch geschlossen wird, wenn die Referenz out-of-scope geht.[/quote]
was ich aber nicht empfehlen würde...
rein vom fehühl her... :) ich könnte da nachts nicht gut schlafen :)[/quote]
Du solltest dich wirklich mehr dem "Perl-Denken" hingeben :-) Wenn du Reference-Counting vertraust, dann kannst du auch diesem Feature vertrauen. Beispiele, wo das automatische Schliessen nett ist:

* Wenn der Filehandle in ein Objekt gepackt wird, damit spaeter darauf zugegriffen werden kann. Der Filehandle sollte also solange offen sein, wie das Objekt gueltig ist. Man braucht das close() nicht in DESTROY aufrufen, sondern kann sich auf Perl verlassen...

* Wenn eine Funktion z.B. eine Zeichenkette in einer Datei sucht und vor Abarbeiten der while-Schleife zurueckspringt. In diesem Fall muss man nicht zweimal close() aufrufen (einmal vor dem vorzeitigen return und das andere Mal nach der while-Schleife), man kann sich ebenfalls auf Perl verlassen. Siehe auch letztes Beispiel in "perldoc -f open".
esskar
 2004-07-19 14:54
#84571 #84571
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich glaube es ja... ich lebe aber allgemein in einer Welt, in der man Sachen zu macht, die man öffnet! :) ...
Solche Umstellungen gehen dann nicht direkt von heute auf morgen... ich behalte es aber im Hinterkopf.
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2004-07-17 20:18.