Perl 5最も煩わしいものから順に。
1.)下位互換性ポリシー. はい、バックコンパットは強みですが、Perl 5 は行き過ぎです。今では、明示的に有効にしない限り、私たちの言語で新しい機能を取得することさえできません。新しい機能が問題を引き起こした場合は、それを無効にするか、古い動作を強制させてください。たとえば、perl 5.10 が追加されました。自分で実装した場合は、配置する必要があるか
、5.8 が機能したが 5.10 が機能しなかった場合に使用しsay
たいと思います。5.8 までの機能のみを使用するようにコードを制限する必要があります。定義されていない場合は、実行中のバージョンにデフォルト設定する必要があります。必要な場合を除き、制限しないことをお勧めします。no feature 'say'
say
use feature 'say';
use 5.010;
use 5.008;
use version;
2.)過剰なボイラープレート。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use autodie;
use English '-no_match_vars';
use 5.010;
package Package::Name;
BEGIN {
Package::Name::VERSION = 0.1;
}
sub somesub {
my $self = shift;
my ( $param1, $param2 ) = @_;
}
1;
これで、コーディングを開始できます。これは#1のために変更されません。もちろん、このようなものへのショートカットuse common::sense;
やuse modern::perl;
、上記を短縮するショートカットがあり、わずかに異なるモジュールやプラグマが必要になる場合があります。しかし、#1のため、これを減らすことはできません。
#!/usr/bin/perl
package Package::Name 0.01;
sub somesub ( $param1, $param2 ) {
}
use 5.012;
いくつかのモジュールはこれを助けており、5.0.12 には新しいパッケージ バージョンがあり、最初に必要だと思いますがMethod::Signatures
、完全に解決されることはありません (言語で)。
3.)不適切な変数の選択
ファイルを丸呑みする
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, "< foo" or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;
wtfと$!
は$/
?読みやすいように書き直します。
#!/usr/bin/perl
use strict;
use warnings;
use English '-no_match_vars';
open my $fh, "< foo" or die $ERRNO;
local $INPUT_RECORD_SEPARATOR; # enable localized slurp mode
my $content = <$fh>;
close $fh;
'-no_match_vars'
パフォーマンスに影響を与えたくない場合は、そこにある必要があることを忘れないでください。
匿名のスカラーを作成する直接的な方法がないのはどうですか?
#!/usr/bin/perl
my $scalar_ref = \do{ my $anon_scalar };
彼らは何かを思いつくことができなかったのですか?
#!/usr/bin/perl
my $scalar_ref = <>;
ああ、どのように perl がスレッドフレンドリーでないかというと、すべての変数 (特殊変数を含む) がデフォルトでグローバルだからです。少なくとも今ではmy $_;
、それを字句スコープに使用local
し、他のスコープに使用できます。
4.)本当に醜い構文
MooseX::Declare は、より優れた構文です。また、 -> を に置き換えたいと思います。(個人の好みはあまり関係ありません)
5.) TIMTOWTDI が多すぎる、またはベスト プラクティスが多すぎる物事をどのように行うべきかを理解するために、3 ~ 5 冊の本を読む必要があるようです。
6.) 以前 (もはや適用されません)。正気でないリリース。5.10.0 には機能がありました。5.10.1 には機能がありました。次のリリースまで時間は設定されていません。現在は、四半期ごとの更新を伴う年次機能リリースになっています。
7.)象牙の塔の視点。コミュニティの問題として、多くの開発者は参入障壁を高くしたいと考えており、n00bs (または実際には彼らに同意しない人) を無礼に扱っても問題ないと考えています。
8.)非常識なバージョン番号/文字列 Perl には浮動小数点のバージョン番号があり、見苦しいです。ああ、開発者は、すべてのダウンストリームがバージョン比較を同じように扱っているわけではないことを知りません。言語の問題ではない
0.012 # simple
5.012001 # semantic
4.101900 # time based + version (for multiple versions in a day)
0.035_002 # prerelease
perl のすべての有効なバージョン.. そのまま使えませんか...
0.12 # simple
5.12.1 # semantic
20100713 # time based (just use the date and be careful not to need to release more than 1 a day)
0.35-beta2 # prerelease
添加
9.)アップグレード後にすべての XS モジュールを再インストールする明確な方法がない