Ho uno script Perl che utilizza internamente moduli Perl dipendenti da CPAN e il mio progetto. Sto usando il valore dell'attributo $0
(nome dello script del processo) nel mio script. Stranamente, questo valore diventa improvvisamente NULL dopo alcune chiamate API dipendenti. Non sto utilizzando eval()
o system()
nel mio processo. Solo un normale script in esecuzione dall'alto in basso. Qualche idea su quale potrebbe essere il motivo della scomparsa del valore $0
?
6
A
risposta
9
Tie::StdScalar per scoprire chi ha cambiato $0
.
{
package Tie::Scalar::Croaker;
use Tie::Scalar qw();
use Carp qw(confess);
our @ISA = qw(Tie::StdScalar);
sub FETCH { $0 }
sub STORE { confess('$0 changed'); }
tie($0, Tie::Scalar::Croaker::);
}
$ 0 può essere modificato - è possibile che venga assegnata una delle chiamate API? – Vicky
L'esecuzione di questo one-liner produce uno strano avvertimento: 'perl -lwe'print $ 0; undef $ 0; ':: In primo luogo stampa '-e', quindi avverte' Uso del valore non inizializzato $ 0 nell'operatore undef alla riga -e 1.' – TLP
Perl non utilizza il concetto "null", quindi con tale istruzione, I ho pensato che intendevi "undef". Ma dovresti chiarire cosa è veramente. E dovresti anche mostrare il codice che ti fa pensare che '$ 0' non è undef. – TLP