Cha*_*hak 8 perl encoding coding-style stack-trace boilerplate
你用哪个安全网?
使用警告;
要么
用严格;
我知道
使用严格的潜在问题; 会在遇到代码时立即停止代码,同时使用警告; 只会发出警告(比如命令行开关-w)并让你的代码运行.
我仍然想知道哪一个主要由Perl程序员使用.他们看到哪一个被最多使用?
tch*_*ist 14
你所拥有的甚至还没有开始.
我使用近似这个代码作为起点.它在我的环境中运行良好,但一如既往,您的里程可能会有所不同.
#!/usr/bin/env perl
use v5.12;
use utf8;
use strict;
use autodie;
use warnings; 
use warnings    qw< FATAL utf8      >;
use feature     qw< unicode_strings >;
use open        qw< :std  :utf8     >;
use charnames   qw< :full           >;
# These are core modules:
use Carp                qw< carp croak confess cluck >;
use File::Basename      qw< basename        dirname >;
use Unicode::Normalize  qw< NFD NFKD       NFC NFKC >;
use Getopt::Long        qw< GetOptions              >;
use Pod::Usage          qw< pod2usage               >;
our $VERSION = v0.0.1;
$0 = basename($0);  # shorter messages
## $| = 1;
$SIG{__DIE__} = sub {
    confess "Uncaught exception: @_" unless $^S;
};
$SIG{__WARN__} = sub {
    if ($^S) { cluck   "Trapped warning: @_" } 
    else     { confess "Deadly warning: @_"  }
};
END { 
    local $SIG{PIPE} = sub { exit };
    close STDOUT;
}
if (grep /\P{ASCII}/ => @ARGV) {
   @ARGV = map { decode("UTF-8", $_) } @ARGV;
}
binmode(DATA, ":utf8");
## Getopt::Long::Configure qw[ bundling auto_version ];
if (!@ARGV && -t STDIN) {
    print STDERR "$0: reading from stdin: type ^D to end, ^C to kill...\n";
} 
while (<>) {
    $_ = NFD($_);
    # ...
    print NFC($_);
}
exit;
=pod
=encoding utf8
=head1 NAME
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 OPTIONS
=head1 EXAMPLES
=head1 ERRORS   
=head1 FILES
=head1 ENVIRONMENT
=head1 PROGRAMS
=head1 AUTHOR
=head1 COPYRIGHT AND LICENCE
=head1 REVISION HISTORY
=head1 BUGS
=head1 TODO
=head1 SEE ALSO
=cut
__END__
Your UTF-8 data goes here.
你可以在Perl Unicode工具箱中找到更多这类事物的例子,目前最多有50个文件,从简单到崇高.
Dav*_*idO 13
use strict如果使用符号引用(即字符串表示符号名称),则会生成错误.如果你使用一个变量而不声明它会产生错误(这会鼓励使用词法' my'变量,但如果正确声明包全局变量也会满足).如果您在脚本中留下裸露的词语(未引用的字符串,基本上是Perl的引号定义),它也会产生错误.使用' strict',您可以启用或禁用三类限制中的任何一种,并且我在范围内的块中执行此操作.最好的做法是启用限制,但有时合法代码要求其某些功能在本地禁用.但是,人们应该长时间地思考这是否真的有必要,以及他们的解决方案是否理想.你可以在Perl的POD中读到有关'严格'的限制.
use warnings根据许多标准生成警告消息,这些标准在POD'perllexwarn'中有描述.这些警告与限制无关,而是注意在他们的编程中可能遇到的最常见的"陷阱".在编写脚本时使用警告是最佳做法.在消息可能不合需要的某些情况下,某个警告类别可能在范围内被本地禁用."警告"中描述了其他信息.
use diagnostics使警告更加冗长,并且在开发或学习环境中,特别是在新手中,这是非常可取的.诊断可能会被排除在"最终产品"之外,但在开发过程中,它们可能是通常生成的简洁消息的一个非常好的补充.您可以在Perl POD"诊断"中阅读有关诊断的信息.
没有理由强迫自己只使用上述选项中的一个或另一个.特别是,使用警告和使用严格通常都应该在现代Perl程序中使用.
在所有情况下(除了您仅用于开发的诊断除外),个别限制或警告可能在词汇上被禁用.此外,他们的错误可能会被困eval{ .... },其中Try::Tiny的try/catch块,和一些其他的方式.如果担心某条消息会向潜在攻击者提供有关脚本的更多信息,则可以将消息路由到日志文件.如果存在所述日志文件占用大量空间的风险,则会出现更大的问题,并且问题的来源应该得到解决,或者在极少数情况下只是禁用该消息.
如今的Perl程序应该是高度严格/警告的最佳实践.
Woo*_*ble 11
如链接页面所示,使用两者.
文档可能有点不清楚.use strict并use warnings抓住不同的问题; use strict会不会引起遇到单纯的警告,当你的程序立即退出,只有当你违反了严格的语法要求.当您的代码执行不太严重的事情时,您仍然只会打印警告.
use strict;
#use warnings;
use diagnostics; # "This module extends the terse diagnostics..." by http://perldoc.perl.org/diagnostics.html
都!但我更喜欢诊断,而不是警告,它可以为您提供更多信息.
| 归档时间: | 
 | 
| 查看次数: | 625 次 | 
| 最近记录: |