2013-08-02 10 views
6

Mam skrypt Perla, który wewnętrznie używa zależnych modułów Perla z CPAN i mojego własnego projektu. W moim skrypcie używam wartości atrybutu $0 (nazwa skryptu procesu). O dziwo, ta wartość staje się nagle NULL po niektórych zależnych wywołań API. W moim procesie nie używam eval() ani system(). Po prostu regularny skrypt prowadzący od góry do dołu. Każdy pomysł, co może być przyczyną zaniku wartości $0?

+0

$ 0 można modyfikować - czy możliwe jest przypisanie jednego z wywołań API? – Vicky

+2

Uruchamianie tego formularza jednorazowego wywołuje dziwne ostrzeżenie: 'perl -lwe'print $ 0; undef $ 0; '': Najpierw wypisuje' -e', następnie ostrzega 'Użycie niezainicjowanej wartości $ 0 w operatorze undef w linii-e 1.' – TLP

+1

Perl nie używa pojęcia "zerowego", więc przez to stwierdzenie, I zgadliście, że chodziło o 'undef'. Ale powinieneś wyjaśnić, co to naprawdę jest. Powinieneś także pokazać kod, który sprawia, że ​​myślisz, że '0 $' jest niezdefiniowany. – TLP

Odpowiedz

9

Tie::StdScalar, aby dowiedzieć się, kto zmienił $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::); 
} 
Powiązane problemy