Moin,
nun, die Lesbarkeit obliegt stets einer eigenen Entscheidung. Ein schöner Hack ist die Vorbelegung von Funktionsargumenten mit Default-Values, in Perl ist das ganz einfach:
use strict;
use warnings;
use Carp;
sub new{
my $class = shift;
my %nr = (
dec => 0,
hex => 0,
@_);
return eval{
croak "Wrong format for hexadecimal number!"
unless $nr{hex} =~ /^[0-9a-fA-F]+$/;
croak "Wrong format for decimal number!"
unless $nr{dec} =~ /^\d+$/;
my $self = bless{
hex => hex($nr{hex}),
dec => $nr{dec}
}, $class;
$self->compare() or carp "The numbers are not equal!";
$self;
};
}
sub compare{
my $self = shift;
$self->{hex} == $self->{dec};
}
my $m = main->new( hex => 'FF', dec => 255 ) or die $@;
Also eine kontextgerechte Verwendung der Perlinternen Variable @_ die sehr vielgestaltig sein kann. Es gibt eine ganze Reihe vordefinierter Variablen die u.a. auch das Verhalten nachgelagerter Funktionen bestimmen, Beispiel:
$, The output field separator for the print operator. If defined,
this value is printed between each of print's arguments. Default
is "undef".
local $, = "\n";
print 1, 2, 3;
Was bewirkt, daß im Listenkontext von print() jedes Element auf einer eigenen Zeile ausgegeben wird. perldoc perlvar gibt diese vordefinierten Variablen samt Beschreibung aus.
Nochn Hack:
$, = "\n";
print stat($0), stat(_) ;
Ausgegeben wird 2x dasselbe, nämlich das was stat() für das eigene Script ermittelt was mit vollständiger Pfadangabe in $0 zu finden ist. Beim 2. Aufruf der stat() wird jedoch anstelle $0 das UnderscoreHandle _ verwendet, was nunmehr auf $0 zeigt.
Aber bei _ wie auch bei $_ muss man schon sehr genau hingucken, daß da auch daß drinsteht was man erwartet.
Hash Slice
my %stat = ();
@stat{qw(dev ino mode nlink uid gid rdev size atime mtime ctime blkize blocks)} =
stat($0);
print ''.localtime $stat{mtime};
MfG