Considerare i seguenti programmi in Perl.Perché un elenco di undef non è un valore di sola lettura o costante in Perl?
use strict;
use warnings;
my @foo = qw(a b c);
undef = shift @foo;
print scalar @foo;
Questo morirà con un messaggio di errore:
Modification of a read-only value attempted at ...
Utilizzando un constat darà un errore diverso:
1 = shift @foo;
Can't modify constant item in scalar assignment at ...
Execution of ... aborted due to compilation errors.
Lo stesso se facciamo questo:
(1) = shift @foo;
Tutti questi hanno senso per me. Ma inserire undef
in un elenco funzionerà.
(undef) = shift @foo;
Ora stampa 2
.
Naturalmente questo è pratica comune se si dispone di un gruppo di valori di ritorno e desideri solo quelle specifiche, come qui:
my (undef, undef ,$mode, undef ,$uid, $gid, undef ,$size) = stat($filename);
La nona riga del codice di esempio in perldoc -f undef mostra questo, butthere c'è spiegazione.
La mia domanda è: come viene gestito internamente da Perl?
Potete fornire un collegamento alla fonte? – simbabque
Per cosa, esattamente? Il codice sorgente di Perl non è esattamente semplice. Puoi consultare https://github.com/Perl/perl5/blob/blead/op.c e cercare 'op_sassign' e' op_aassign', se questo ti aiuta. Oppure, probabilmente più utile, vedi il bytecode compilato facendo qualcosa di simile a questo: 'perl -MO = Terse -E '(undef) = 1;'' –
Scusa, avrei dovuto formularlo in modo diverso. Quello che intendevo era, puoi fornire qualcosa per confermare quella spiegazione? Dal momento che non hai collegato alla documentazione dicendo che pensavo avessi cercato altrove, molto probabilmente la fonte. :) – simbabque