グローバル変数を使用することは、通常、非常に悪いことであり、設計エラーを示しています。この場合、サブルーチンに引数を渡す方法がわからないことがエラーのようです。
Perl でのパターンは次のとおりです。
sub I_take_arguments {
# all my arguments are in @_ array
my ($firstarg, $secondarg, @rest) = @_;
say "1st argument: $firstarg";
say "2nd argument: " .($firstarg+1). " (incremented)";
say "The rest is: [@rest]";
}
サブは次のように呼び出されます
I_take_arguments(1, 2, "three", 4);
(これらを として呼び出さない&nameOfTheSub
でください。これは、通常は必要としない非常に特殊な動作を利用します。)
これは印刷されます
1st argument: 1
2nd argument: 3
The rest is: [three 4]
サブルーチンは、ステートメントと共に、または実行された最後のステートメントの値として、値を返すことができます。return
これらのサブルーチンは同等です:
sub foo {return "return value"}
sub bar {"return value"}
getfileattributes
私はあなたを次のように書きます
sub getFileAttributes {
my ($name) = @_;
return
-r $name ? "readable" : "not readable",
-w $name ? "writable" : "not writable",
-x $name ? "executable" : "not executable";
}
ここで何が起きてるの?引数を取り、値のリスト$name
を返します。キーワードは省略できます。は値のリストを取り、括弧は必要ないので、省略します。演算子は他の言語から知られています。return
return
TEST ? TRUE-STATEMENT : FALSE-STATEMENT
次に、ループで、サブが次のように呼び出されます
for my $filename (@ARGV) {
my ($r, $w, $x) = getFileAttributes($filename);
say "The file $filename is $r, $w and $x";
}
また
foreach my $file (@ARGV) {
my @attributes = getFileAttributes($file);
printf "The file $file is %s, %s and %s\n", @attributes;
}
ノート:
say
に似print
ていますが、最後に改行を追加します。これを使用するには、Perl > 5.10 が必要でuse 5.010
、どのバージョンまたはuse feature qw(say)
.
use strict; use warnings;
あなたが確かによく知らない限り、常に。
多くの場合、変数に 2 回代入しなくてもプログラムを作成できます (単一代入形式)。これにより、制御フローに関する推論がはるかに簡単になります。これが、グローバル変数 (ただし、グローバル定数ではない) が悪い理由です。