1 2 3 4 5 6 7 8 9 10 11
# 1 while ( defined( my $line = <$handle> ) ) { # 2 my ( $key, $value ) = split m{=}, $line; # 3 $hash{$key} = $value; } # 4 chomp(%hash);
my %hash = map { chomp; split /=/, $_, 2; } <$handle>;
Quotenicht in 3
2011-04-14T09:15:51 LinuxerQuotenicht in 3
Wo habe ich die "3" definiert?
2011-04-14T09:15:51 LinuxerQuotenicht in 3
Wo habe ich die "3" definiert?
[...]
Quote[...]
edit: Das chomp() habe ich nachgelagert, weil ich hier nicht für jede Zeile separat ein chomp() aufrufen wollte.
So hat es nur einen Aufruf nachdem alles eingelesen wurde.
[...]
Wo iteriere ich mehrmals über die Liste?
[...]
Quote[...]
Kürzer ist nicht unbedingt lesbarer und verständlicher.
[...]
my $line = unpack "A*", $line;
2011-04-14T09:54:54 rostials Alternative zu chomp() geht auch:
Code (perl): (dl )my $line = unpack "A*", $line;
Mit dem Vorteil, dass sowohl ein Zeilenumbruch, als auch angehängte Leerzeichen entfernt werden. Ist rvntl. eine Überlegung wert.
$line =~ s/^\s*(.*?)\s*$/$1/;
1 2 3 4 5 6 7 8
# UTF-8 Zeichen in $s # Leerzeichen und Zeilenumbruch nach äöü my $s = qq( äöü ); print unpack "A*", $s; # äöü
pqchomp() auf den kompletten hash anzuwenden bedeutet, dass chomp auch jeden hash-key anfassen bzw. testen muss.
perldoc -f chompchomp VARIABLE
...
If VARIABLE is a hash, it chomps the hash's values, but not its keys.
1 2 3 4 5 6 7 8 9 10 11
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $file='test.cnf'; use Config::General qw(ParseConfig); my %conf=ParseConfig($file); print Dumper(\%conf);
2011-04-20T06:58:13 crojayHi,
%exportHash = map { chomp; split /=/, $_, 2; } <HASHFILE>;
wobei ich ein Problem habe mit leerzeichen.
%exportHash = map { chomp; split /\s*=\s*/, $_, 2; } <HASHFILE>;