Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$ perl -MData::Dumper -e '@a = map { {$_ => $_} } qw/a b/; print Dumper(\@a)'
$VAR1 = [
{
'a' => 'a'
},
{
'b' => 'b'
}
];
$ perl -MData::Dumper -e '@a = map { $x = $_; {$x => $x} } qw/a b/; print Dumper(\@a)'
$VAR1 = [
'a',
'a',
'b',
'b'
];
Кто бы мог подумать, что резльтат будет разным! :-)$ perl -MData::Dumper -e '@a = map { $x = $_; +{$x => $x} } qw/a b/; print Dumper(\@a)'map <блок> <список> иmap <выражение>, списокperl -MO=Deparse -MData::Dumper -e "@a = map {{$_ => $_}} qw/a b/; print Dumper(\@a)"
=======================================================
use Data::Dumper;
@a = map({+{$_, $_};} 'a', 'b');
print Dumper(\@a);
-e syntax OK
map {{$_ => $_}} <список> пытается привести его к коду map +{$_ => $_}, <список>map {+{$_ => $_}} <список>perl -MData::Dumper -e "@a = map {$x = $_; +{$x => $x}; } qw/a b/; print Dumper(\@a)"
$VAR1 = [
{
'a' => 'a'
},
{
'b' => 'b'
}
];
If what's within the angle brackets is neither a filehandle nor a simple scalar variable containing a filehandle name, typeglob, or typeglob reference, it is interpreted as a filename pattern to be globbed, and either a list of filenames or the next filename in the list is returned, depending on context.
print join("", readline($a->{'file'}))~$ perl -MO=Deparse, -e 'map {if ($_ == 4) {$_}} 1..10'
map {if ($_ == 4) {
$_;
}} 1..10;
-e syntax OK
~$ perl -MO=Deparse,-p -e 'map {if ($_ == 4) {$_}} 1..10'
map({if (($_ == 4)) {
$_;
}} (1..10));
-e syntax OKwhile(my $ref = $sth->fetchrow_hashref()) {
}$ref — хэш. А потом делаешь запрос в одну колонку и думаешь, зачем тебе хэш, когда можно просто в строку читать? Ага:while(my $str = $sth->fetchrow()) {
}perl -MO=Deparse -e 'while ($line = <STDIN>) {}'
---------------------------------------------------------------------------------
while (defined($line = <STDIN>)) {
();
}
Этот загадочный while…