Jak zjistit, jestli je $_[0] lvalue || Jak psat $SIG{__DIE__}
Pavel Smerk
xsmerk na fi.muni.cz
Pondělí Říjen 18 03:04:30 CEST 2010
Ahoj vespolek.
Mam podprogram a v jeho tele potrebuju zmenit hodnotu jeho parametru, pokud
je to mozne. Delam tedy eval { $_[0] = hodnota }. Ted jsem ale predefinoval
$SIG{__DIE__}, ve kterem chci mit na konci exec --- a ouha, ono se to vola i
z toho eval-u, cilize pokud $_[0] neni lvalue, skoncim predcasne. Co s tim?
Jednak bych mohl misto eval mit nejake $_[0] = hodnota if lvalue $_[0]. Ale
nedokazal jsem najit zadny zpusob, jak zjistit, jestli $_[0] je lvalue.
Druha moznost by byla, ze bych $SIG{__DIE__} zacinal nejakym testem, jestli
jsem volan z eval-u. Ovsem pokud by to bylo spravne reseni, cekal bych, ze
bude zmineno v perlvar, tam, kde se tato situace popisuje a kde to vyzniva,
ze jde (volani $SIG{__DIE__} i z eval-u) o ne-uplne-dobre chovani, ktere
muze byt v budoucnu odstraneno. Ale je tam jen varovani, aby na to nikdo
nespolehal, nikoli i nejaky workaround, pokud mi takove chovani prekazi.
Cilize mam trochu pochybnost, jestli by takove reseni nemelo nejake musky.
(Aktualne tedy mam {local $SIG{__DIE__} = undef; eval { $_[0] = hodnota }},
ale to se mi moc nelibi. :-)
Diky za pripadne komentare, P.
Další informace o konferenci Perl