2013-08-02 1 views
6

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?

+0

$ 0 può essere modificato - è possibile che venga assegnata una delle chiamate API? – Vicky

+2

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

+1

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

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::); 
}