Portál AbcLinuxu, 9. července 2025 20:08
Sorry za zacatecnicky dotaz, ale nemuzu prijit na to jak primo vytisknout hodnotu prvku pole vraceneho podprogramem. Nasledujici kod by mel vytisknout 4.
perl -wle 'print ${&mysub}[1][1];sub mysub { my @x = [[1,2],[3,4]]; return @x;}'
Use of uninitialized value in print at -e line 1.
Pritom pokud to pole vratim primo, nejak dojde ke konverzi na seznam a hodnota se vypise spravne:
Mohl by to nekdo logicky vysvelit ?
perl -wle 'print ${&mysub}[1][1];sub mysub { return [[1,2],[3,4]];}'
4
Dik.
perl -wle 'print ${&mysub}[1][1];sub mysub { print "want scalar\n" unless wantarray; return [[1,2],[3,4]];}' want scalar 4v skalárnom kontexte sa @x vyhodnotí ako 1
Povedlo se mi to pres vraceni skalaru - reference na pole, ale to asi nebude to prave orechove :(
@array = &mysub;
print $pole[1][1];
sub mysub () {
@x = ( [1, 2], [3, 4] );
return @x;
}
print ${mysub}[1][1];
sub mysub () {
@x = ( [1, 2], [3, 4] );
return \@x;
}
print [ &mysub ]->[0][1][1]; print ((&mysub)[0]->[1][1]);
Ta prvni konstrukce pres anonymni pole me mela napadnout. Je tam kvuli tomu nejaka rezie navic (vytv. pole) ?
Tu druhou jsem priznavam zatim nepochopil Vnitrni zavorky kolem &mysub zrejme navozuji seznamovy kontext, ale pritomnost tech vnejsich mi stale unika.
->
)
print (${(&mysub)[1]}[1]);
versus puvodni
print ((&mysub)[1]->[1]);
Vrta mi hlavou, jak jste mi mohl spravne odpovedet a pritom tomu sam nerozumite
->
sa môže medzi zátvorkami vynechávať.$x->[0][0];
vs. $x->[0]->[0];
ako? jednoducho, zapísal som ako by som si to predstavoval a potom ošetroval syntax error
->
uvedeno nejméně jednou a ty další se mohou vynechat, protože jinak než odkazem to být nemůže. Proč? Zeptej se Larryho
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.