我有一个模块,我的变量很少被声明为hfs_const.pm
。一世
我在另一个Perl程序中使用此模块。
我也在另一个Perl文件中使用了很少的模块变量。
测试用例:我通过对象从Perl文件中使用的模块中删除一个变量。然后我编译Perl文件。
我正在使用use strict
和use warnings
,但是当我编译Perl程序时,它显示一切正常。
我认为它应该为未声明的模块变量抛出错误。
以下是模块和Perl文件
#!/usr/bin/perl
package hfs_const; # const definition file for hfs.
use Exporter 'import';
use strict;
use warnings;
#--------------------------------------------------------------------------------------
use constant ENABLE_HFS => 1;
use constant PROC_MOUNT_DIR => "/proc/fs/hydrafs/hfsd/mount";
#use constant PROC_MOUNT_DIR =>"/export/proc";
use constant PROC_HFSD_INFO_FILE => "/proc/fs/hydrafs/hfsd/info";
use constant DEBUG => 0;
use constant IGNORE_SERVICE => 0;
#use constant MAX_HFS_PER_AN =>250;
#use constant RETRY_COUNT =>3;
use constant GET_ALL_HFS_TIMEOUT => 12;
#use constant HFS_COUNT_TO_CHANGE_AN =>250;
use constant CREATING_TIME => 600;
#our $bar=4;
sub new {
my $class = shift;
my $this = {};
bless $this, $class;
return $this;
}
sub getname {
my $this = shift;
print "Ankur";
}
1;
#!/usr/bin/perl
#
use strict;
use warnings;
use hfs_const;
my $const = new hfs_const();
my $isRO = 3;
if ( $isRO != 4 ) {
print $hfs_const::bar;
print hfs_const::RETRY_COUNT;
print $const->HFS_COUNT_TO_CHANGE_AN;
print hfs_const::MAX_HFS_PER_AN;
}
else {
print hfs_const::GET_ALL_HFS_TIMEOUT;
}
$const->getname();
我在编译时收到以下警告
int@mint-VirtualBox ~ $ perl -c hfs.pl
Name "hfs_const::RETRY_COUNT" used only once: possible typo at hfs.pl line 12.
Name "hfs_const::MAX_HFS_PER_AN" used only once: possible typo at hfs.pl line 14.
Name "hfs_const::bar" used only once: possible typo at hfs.pl line 11.
hfs.pl syntax OK
但是我没有收到通过对象使用的常量HFS_COUNT_TO_CHANGE_AN的任何警告。
有人可以解释为什么会这样吗?
答案 0 :(得分:1)
您将HFS_COUNT_TO_CHANGE_AN
视为一种方法($const->HFS_COUNT_TO_CHANGE_AN
),因此Perl不会在编译时检查它是否存在。但是,您会收到运行时错误。