Perl 中的裸词
与任何其他语言一样,Perl 也容易出错。 Perl 中的一些特性很难正确使用。 Perl 的解析器借助一些符号来理解 Perl 的运算符、函数、方法。但情况并非总是如此。当我们使用Barewords时,解析器必须进行猜测。 Bareword 是没有必要符号或标点符号的标识符或变量。简单地说,我们可以说Barewords 是没有引号的单词(即 Quotless Strings)。尽管 Perl 中的严格规则不鼓励使用模棱两可的裸词,但解析器仍然可以接受其中一些。例子:
#!usr/bin/perl
my $bw = BWeg;
print "$bw\n";
这将打印 BWeg。但是当我们使用同名子程序时,情况会怎样呢?例子:
#!usr/bin/perl
sub BWeg
{
return "Subroutine has been executed";
}
$bw = BWeg;
print "$bw\n";
在这里我们可以看到子程序已经被执行。所以我们也可以说 Barewords 会导致歧义。为了避免这种歧义,Perl 有“use strict”。使用 strict 可以使 Perl 程序不易出错。例子:
#!usr/bin/perl
use strict;
my $bw = BWeg;
print "$bw\n";
它发出这样的编译错误。
如何正确使用裸词?
裸词可用于哈希键、包名、常量、命名代码块。例子:
#!usr/bin/perl
my %India = (UP =>'Taj Mahal',
Rajastan =>'Chittorgarh',
Kerala =>'Bakel Fort');
# Prints Bakel Fort
my $var1 = $India{'Kerala'};
print($var1, "\n");
# Prints Taj Mahal
my $var2 = $India{UP};
print($var2, "\n");
通常 Perl 中的哈希键是明确的。在这里我们可以看到我们以 $India{'Kerala'} 和 $India{UP} 两种方式声明了关键函数。即使它们的声明方式不同,它们也会给出输出。
裸词包名称
包名也是裸词。 Perl 必须确定如何解析Package->method 。为此,我们通过附加包分隔符 (::) 来强制解析器将 Package 视为包名。
裸词命名代码块
特殊命名的代码块 AUTOLOAD、BEGIN、CHECK、DESTROY、END、INIT 和 UNITCHECK 是裸字。
package Monkey::Butler;
BEGIN { initialize_simians( __PACKAGE__ ) }
sub AUTOLOAD { ... }
我们可以将 sub 与 AUTOLOAD 分开,但这不是常见的做法。
裸词常量
用常量编译指示声明的常量可用作裸字。
# don't use this for real authentication
#!usr/bin/perl
use constant NAME => 'GeeksForGeeks';
use constant PASSWORD => 'GeeksPl@tform';
$name=;
$pass=;
return unless $name eq NAME && $pass eq PASSWORD;
如果提供了错误的用户名和密码,则返回 false。此外,常量不会插入双引号字符串中。