如何将Perl变量定位在不同的堆栈框架中?
发布时间:2020-12-15 21:22:27 所属栏目:大数据 来源:网络整理
导读:我有一些自动生成的代码,有效地写出以下在一些不同的地方在一些代码: no warnings 'uninitialized';local %ENV = %ENV;local $/ = $/;local @INC = @INC;local %INC = %INC;local $_ = $_;local $| = $|;local %SIG = %SIG;use warnings 'uninitialized';
我有一些自动生成的代码,有效地写出以下在一些不同的地方在一些代码:
no warnings 'uninitialized'; local %ENV = %ENV; local $/ = $/; local @INC = @INC; local %INC = %INC; local $_ = $_; local $| = $|; local %SIG = %SIG; use warnings 'uninitialized'; 当自动生成代码时,有人认为不是严格必须的代码是“美丽的”,但我想把它拉进一个子程序。但是,这会将那些变量定位在该子程序中。有没有办法本地化这些变量在调用堆栈帧? 更新:在类似的情况下,它将是很高兴能够运行eval在更高的堆栈帧。我认为Python已经有这个。这将是很好,如果Perl也。 解决方法
也许你可以安排使用那些本地化的代码生成为一个闭包?然后你可以
sub run_with_env { my ($sub,@args) = @_; no warnings 'uninitialized'; local %ENV = %ENV; local $/ = $/; local @INC = @INC; local %INC = %INC; local $_ = $_; local $| = $|; local %SIG = %SIG; use warnings 'uninitialized'; $sub->(@args); } run_with_env(sub { # do stuff here }); run_with_env(sub { # do different stuff here }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |