Moin Moin!
ginge dann statt
my $xxx=$myhash{'element'}//0;
> auch das für mich verständlichere
> ~~~perl
> my $xxx = defined($myhash{'element'}) ? $myhash{'element'} : 0;
>
~~~?
Klar, das geht.
Nur ist a // b nicht exakt das gleiche wie defined(a) ? a : b, weil in der langen Form a zwei mal evaluiert wird. Bei Zugriffen auf Hash-Elemente sollte(\*) das harmlos sein, bei Funktionsaufrufen kann das auch mal schiefgehen:
~~~perl
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
sub doof
{
say "Hallo";
return 1;
}
my $xxx=doof() // 'bla';
say "xxx=$xxx";
my $yyy=defined(doof()) ? doof() : 'bla';
say "yyy=$yyy";
(*): "Sollte harmlos sein". Muß aber nicht. Spätestens mit Tied Hashes wird aus einem einfachen Lesezugriff ein Methodenaufruf.
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
{
package DoofHash;
# "You are not expected to understand this."
use Tie::Hash ();
our @ISA=qw(Tie::StdHash);
sub FETCH
{
say "Hallo";
$_[0]->SUPER::FETCH($_[1]);
}
}
my %hash;
tie %hash,'DoofHash';
$hash{'x'}='egal';
my $xxx=$hash{'x'} // 'bla';
say "xxx=$xxx";
my $yyy=defined($hash{'x'}) ? $hash{'x'} : 'bla';
say "yyy=$yyy";
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".