Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了perl – 使用严格的空列表等同于不使用strict?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
TLDR:查看问题标题.

original version of a question中,使用Strict();在程序的顶部.没有变量与我的声明.程序工作我指出,代码不会因为失踪的人而工作,但事实证明我是错误的.

$perl e 'use Strict (); $foo = 1'

这个程序工作.它不会崩溃但显然这是崩溃:

$perl -e 'use Strict; $foo = 1'
Global symbol "$foo" requires explicit package name (did you forget to declare "my $foo"?) at -e line 1.
Execution of -e aborted due to compilation errors.

我的第一个想法是贬低它,看看是否还有其他事情发生.

$perl -MO=Deparse -e 'use Strict (); $foo = 1'
use Strict ();
$foo = 1;
-e syntax OK

但不是.然后它让我想到,你可以使用严格的“vars”,这只会打开vars thing1.这显然是通过调用import.

使用Strict与BEGIN {require Strict; Strict->进口; },所以模块的规则也适用于pragmata.如果我使用Foo(),则不会导入任何内容.因此,使用Strict();应该与require Strict相同,只是在运行时,因为没有任何进口.

$perl -e 'require Strict; $foo = 1'

这不会崩溃.但是在运行时你不能打开在编译时设置的东西.

那么这实际上是做什么的呢?当Perl达到我的实际代码时,它可能已经在其他地方遇到了严格的pragma,所以它不会再加载它.它不会导入任何东西.

$perl -e 'print %INC'

哎呀.这没有打印. %INC为空.但是如果我们使用另一个模块,那里有一些东西.

$perl -MData::Dumper -e 'print Dumper \%INC'
$VAR1 = {
          'warnings.pm' => '/usr/share/perl/5.22/warnings.pm','overload.pm' => '/usr/share/perl/5.22/overload.pm','Carp.pR_50_11845@' => '/usr/share/perl/5.22/Carp.pR_50_11845@','Strict.pm' => '/usr/share/perl/5.22/Strict.pm','overloading.pm' => '/usr/share/perl/5.22/overloading.pm','constant.pm' => '/usr/share/perl/5.22/constant.pm','bytes.pm' => '/usr/share/perl/5.22/bytes.pm','Data/Dumper.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.22/Data/Dumper.pm','XSLoader.pm' => '/usr/share/perl/5.22/XSLoader.pm','Exporter.pm' => '/usr/share/perl/5.22/Exporter.pm','warnings/register.pm' => '/usr/share/perl/5.22/warnings/register.pm'
        };

如果我们加载Data :: Dumper,在某些时候加载了Strict.但不是在纯粹的例子中.

$perl -e 'use Strict (); print %INC'
Strict.pm/usr/share/perl/5.22/Strict.pm

好.这加载Strict.pm.

$perl -e 'require Strict; print %INC'
Strict.pm/usr/share/perl/5.22/Strict.pm

那么这样呢但是,仍然没有一个严格的事情被启用.

所以问题真的是,使用Strict()相当于根本没有使用Strict语句,还是有其他的事情发生?

1)perldoc strict指严格可以采取的三个不同论点

解决方法

use Strict ();

(基本上)没有做任何事情:见the docs

当然,严格只做一些事情,如果你调用它的import方法(你可以很容易地通过读取它的源代码来验证,它只有大约150行).所以绕过导入方法会绕过使用Strict的整个效果.

大佬总结

以上是大佬教程为你收集整理的perl – 使用严格的空列表等同于不使用strict?全部内容,希望文章能够帮你解决perl – 使用严格的空列表等同于不使用strict?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。