Michael Carman のコメントに照らして、質問を書き直すことにしました。この編集の前に 11 のコメントが表示されていることに注意してください。また、私が求めていることを明確にする方法で質問を書いていないというマイケルの観察に信憑性を与えてください。
質問:モジュールをインポートするだけで、strict に関して持つ特別なステータスを偽装するための標準的な (または最もクリーンな) 方法は何ですか?
$a
$b
まず最初にいくつかのセットアップ。以下の作品:
#!/bin/perl
use strict;
print "\$a=$a\n";
print "\$b=$b\n";
もう 1 行追加すると、次のようになります。
print "\$c=$c\n";
コンパイル時にエラーが発生します。これは、見事な印刷コードが実行されないことを意味します。
コメントアウトすると正常にuse strict;
動作します。制限の外では、$a
主に、それらの名前と比較する 2 つの値を渡すという点$b
で特別です。sort
my @reverse_order = sort { $b <=> $a } @unsorted;
したがって、 と の主な機能上の違いは$a
、$b
たとえ Perl が「それらの名前を知っている」としても、ソートするとき、またはList::Utilのいくつかの関数を使用するときに、これを知っている方がよいということです。
strict を使用して、まったく新しい方法で特殊変数になる$a
場合のみです。$b
それらは、宣言されていないことを訴えることなく、厳密に渡される唯一の変数です。
:さて、私は厳密が好きですが、TIMTOWTDI (それを行うには複数の方法があります) が Perl のルール #1 である場合、これはあまり TIMTOWDI ではないことに気づきました。それはそれを言い、$a
特別$b
であり、それだけです。変数を使用したい場合は、宣言する必要はありませ$a
ん$b
。を追加して 3 つの変数が必要な場合$c
、突然、まったく別の方法があります。
ハッシュを操作$k
する際に$v
、より理にかなっている可能性があることを気にしないでください。
my %starts_upper_1_to_25
= skim { $k =~ m/^\p{IsUpper}/ && ( 1 <= $v && $v <= 25 ) } %my_hash
;`
今、私は厳格なものを使用しています。しかし、私はただ、最もコンパクトな構文で見えるようにしたい$k
と思っています。そして、私はそれが単に見えるようにしたい$v
skim
use Hash::Helper qw<skim>;
私はこの質問を、黒魔術の方法を知りたくて尋ねているのではありません。以下の私の「答え」は、危険な Perl を十分に知っていることを知らせてくれるはずです。厳密に他の変数を受け入れる方法があるかどうか、または最もクリーンな解決策は何かを尋ねています。答えはノーかもしれません。そうであれば、TIMTOWTDI とは思えません。