在perl文件中使用未定义的常量不会抛出任何警告

时间:2016-06-09 08:34:07

标签: perl

我有一个模块,我的变量很少被声明为hfs_const.pm。一世 我在另一个Perl程序中使用此模块。

我也在另一个Perl文件中使用了很少的模块变量。

测试用例:我通过对象从Perl文件中使用的模块中删除一个变量。然后我编译Perl文件。

我正在使用use strictuse warnings,但是当我编译Perl程序时,它显示一切正常。

我认为它应该为未声明的模块变量抛出错误。

以下是模块和Perl文件

hfs_const.pm

#!/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;

hfs.pl

#!/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的任何警告。

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您将HFS_COUNT_TO_CHANGE_AN视为一种方法($const->HFS_COUNT_TO_CHANGE_AN),因此Perl不会在编译时检查它是否存在。但是,您会收到运行时错误。