这不起作用(下面的错误消息)。我怎么能让这个工作?
#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.1;
sub routine {
require FindBin;
FindBin::->import( '$RealBin' );
say $RealBin;
}
routine();
给出这个输出
Global symbol "$RealBin" requires explicit package name at ./perl.pl line 9.
Execution of ./perl.pl aborted due to compilation errors.
最佳答案
require
和 import
发生在运行时,而变量必须在编译时声明。所以我们有三个解决方案:
FindBin
:use FindBin qw/$RealBin/;
sub routine {
say $RealBin;
}
我强烈建议这个解决方案。
strict
或 warnings
提示的情况下使用:sub routine {
require FindBin;
FindBin->import('$RealBin');
our $RealBin; # this just declares it so we can use it from here on
say $RealBin;
}
sub {
require FindBin;
# FindBin->import; # does nothing here
say $FindBin::RealBin;
}
从性能的角度来看,在运行时加载
FindBin
可能没有用,您应该正常使用 use
。如果您正在执行这些奇怪的运行时体操以在每次调用 $RealBin
时重新计算 routine
,那么这些解决方案都不起作用,因为 require
如果模块已经加载,则不会执行该模块(它执行类似 $INC{'FindBin.pm'} or return
的操作)。 FindBin::again
函数可能会有所帮助。FindBin
docs require
docs 关于perl - 使用 "require"时如何导入变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22422879/