perl - 如何使用来自各种来源的“我们的”变量共享模块?
问题描述
我在一个模块中有一个子例程,我想使用在调用者中找到的“我们的”变量。以下代码完全符合我的要求,但仅适用于两个先前已知的情况。有没有办法更优雅地做到这一点?
sub hello { # this code is in a module
my $caller = (caller)[0];
if ($caller eq 'main') {
print "Hello $main::global!\n";
} elsif ($caller eq 'Test') {
print "Hello $Test::global!\n";
} else {
print "I don't know what to do!\n";
return 0;
}
return 1;
}
解决方案
您正在寻找的成语是
no strict 'refs';
print "Hello ",${"$caller\::global"}, "!\n";
这种结构是非法的,use strict
所以你在使用它时必须禁用严格的引用。
推荐阅读
- ibm-cloud - Watson 机器学习部署需要太多时间
- oracle - 使用 SQL Developer 连接到 Oracle 数据库在 Windows 上有效,但在 Ubuntu 上无效
- dart - 当 ExpansionTile 在 Flutter 中崩溃时,ExpansionTile 内的 TextFormField 会丢失数据
- python - 寻找 Flask 的 request.get_data() 的 Django 等效项(用于使用原始请求正文进行 Slack 请求验证)
- python-3.x - 将属性“键”添加到连接的数据帧
- python - 如何使用 python 从 azure aks 获取 kubectl 配置?
- c# - AuthenticationHeaderValue:.NET CORE 上的 SharedAccessSignature
- continuous-integration - 带有 XUnit 的 dotMemory Unit Standalone 启动器在测试结束时挂起
- python - 在循环运行时显示 Tkinter GUI
- javascript - React Native - 同步运行函数