Perl require File::Find:如何在没有警告的情况下使用File::Find::name?
当我像这样加载时,如何修改此脚本以不获取警告Perl require File::Find:如何在没有警告的情况下使用File::Find::name?,perl,file,find,warnings,require,Perl,File,Find,Warnings,Require,当我像这样加载时,如何修改此脚本以不获取警告 #!/usr/bin/env perl use warnings; use strict; use 5.10.1; require File::Find; File::Find->import('find'); find( { wanted => sub { my $file = $File::Find::name; #say $file; }, no_c
#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.1;
require File::Find;
File::Find->import('find');
find( {
wanted => sub {
my $file = $File::Find::name;
#say $file;
},
no_chdir => 1,
},
shift );
输出:
#Name "File::Find::name" used only once: possible typo at ./perl9.pl line 11.
对于初学者,不要这样加载文件。:) 如果需要,只需添加:
$File::Find::name if 0;
最简单的方法是将$File::Find::name
更改为
do { no warnings 'once'; $File::Find::name }
对于初学者,不要这样加载文件。:) 如果需要,只需添加:
$File::Find::name if 0;
最简单的方法是将$File::Find::name
更改为
do { no warnings 'once'; $File::Find::name }
只需将
require
替换为use
。那会解决的
通常,使用require
的唯一原因是您有特定的理由在运行时延迟加载模块。通常,你不会
如果您不想从模块中导入任何符号,请将空列表传递给use
,如下所示:
use File::Find ();
或
编辑:如果您确实有正当理由推迟模块加载,并且发现ikegami的解决方案太难看,您可以通过以下方式在本地禁用警告:
no warnings 'once';
在生成警告的语句之前。这将对最里面的封闭代码块的其余部分禁用该特定警告。要找出哪些警告消息属于哪些类别,请参阅。只需将
要求
替换为使用
。那会解决的
通常,使用require
的唯一原因是您有特定的理由在运行时延迟加载模块。通常,你不会
如果您不想从模块中导入任何符号,请将空列表传递给use
,如下所示:
use File::Find ();
或
编辑:如果您确实有正当理由推迟模块加载,并且发现ikegami的解决方案太难看,您可以通过以下方式在本地禁用警告:
no warnings 'once';
在生成警告的语句之前。这将对最里面的封闭代码块的其余部分禁用该特定警告。要找出哪些警告消息属于哪些类,请参阅。这看起来不漂亮。然后在加载模块之前不要使用它。这看起来不漂亮。然后在加载模块之前不要使用它。我只想在条件为真时加载模块。好的,这是对
require
的合法使用。首先,你可能想在你的问题中提到这一点。无论如何,请参阅上面对我的答案的编辑。然后仅在相同条件下使用模块加载代码。禁用一种类型的所有警告以使一个警告静音是很难看的,因为它会削弱范围内的所有代码。或者您是在建议执行{no warnings'once';$File::Find::name}
?在我的回答中添加了后面的内容。@ikegami:那会有用的,但是如果他的通缉
子项真的像他的示例中那样只有几行,我只会添加无警告“一次”代码>开头,仔细检查这些行上是否有任何变量名拼写错误。(如果您使用的是严格的'vars'
,那么“仅使用一次”警告实际上并没有多大用处,幸运的是,OP就是这样。)但您肯定是对的,禁用任何警告,即使是那些边际效用的警告,对于长代码段都是一个坏习惯。我只想在条件为真的情况下加载模块。好的,很公平,这是对require
的合法使用。首先,你可能想在你的问题中提到这一点。无论如何,请参阅上面对我的答案的编辑。然后仅在相同条件下使用模块加载代码。禁用一种类型的所有警告以使一个警告静音是很难看的,因为它会削弱范围内的所有代码。或者您是在建议执行{no warnings'once';$File::Find::name}
?在我的回答中添加了后面的内容。@ikegami:那会有用的,但是如果他的通缉
子项真的像他的示例中那样只有几行,我只会添加无警告“一次”代码>开头,仔细检查这些行上是否有任何变量名拼写错误。(如果您使用的是严格的'vars'
,那么“仅使用一次”警告实际上并没有多大用处,幸运的是,OP就是这样。)但您肯定是对的,禁用任何警告,即使是那些具有边际效用的警告,对于较长的代码段都是一个坏习惯。