首页 > 解决方案 > 如何使用来自各种来源的“我们的”变量共享模块?

问题描述

我在一个模块中有一个子例程,我想使用在调用者中找到的“我们的”变量。以下代码完全符合我的要求,但仅适用于两个先前已知的情况。有没有办法更优雅地做到这一点?

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

标签: perl

解决方案


您正在寻找的成语是

no strict 'refs';
print "Hello ",${"$caller\::global"}, "!\n";

这种结构是非法的,use strict所以你在使用它时必须禁用严格的引用。


推荐阅读