gpt4 book ai didi

perl - 如何在不同的堆栈帧中本地化 Perl 变量?

转载 作者:行者123 更新时间:2023-12-03 10:54:27 26 4
gpt4 key购买 nike

我有一些自动生成的代码,它们在某些代码的一堆不同位置有效地写出以下内容:

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

关于perl - 如何在不同的堆栈帧中本地化 Perl 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com