📜  Perl 中的裸词

📅  最后修改于: 2022-05-13 01:55:47.537000             🧑  作者: Mango

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。此外,常量不会插入双引号字符串中。