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