サブルーチン変数の値を別のサブルーチン変数に転送するにはどうすればよいですか。グローバル変数を使用できますか。
sub foo(){
my $myvar = "Hello";
}
sub foo1(){
my $myvar1 = $myvar; # how can I get the "Hello" from $myvar.
}
パッケージとグローバル変数を使おうとしましたが失敗しました。
Package Bar;
our $bar;
ありがとうございました。
サブルーチン変数の値を別のサブルーチン変数に転送するにはどうすればよいですか。グローバル変数を使用できますか。
sub foo(){
my $myvar = "Hello";
}
sub foo1(){
my $myvar1 = $myvar; # how can I get the "Hello" from $myvar.
}
パッケージとグローバル変数を使おうとしましたが失敗しました。
Package Bar;
our $bar;
ありがとうございました。
2 つの関数を含むスコープで変数を宣言できます。
{ my $myvar
sub foo{
$myvar = "Hello";
}
sub foo1{
my $myvar1 = $myvar;
}
}
ただし、これは実際にはエレガントではなくfoo1
、 の値がどこ$myvar
に設定されているかが明確でないため、維持するのが難しい場合があります。変数を引数として渡す方がよいでしょう。
sub foo {
my $myvar = "Hello";
return $myvar;
}
sub foo1 {
my( $myvar)= @_;
my $myvar1 = $myvar;
}
# calling code
my $myvar= foo();
foo1( $myvar);
$myvar
3 つすべてが、異なるスコープ内の異なる変数であることに注意してください。
余談ですが、プロトタイプ ( sub foo()
) を使用することは、彼らが何をしているのかを本当に理解していない限り、おそらく良い考えではありません (プロトタイプに関する議論については、プロトタイプに関する問題を参照してください)。
サブルーチン変数の値を別のサブルーチン変数に転送するにはどうすればよいですか? グローバル変数を使用できますか?
はい、次のことができます。
my $myvar;
sub foo(){
$myvar = "Hello";
}
sub foo1(){
my $myvar1 = $myvar; # how can I get the "Hello" from $myvar.
}
これは、「use strict;」でも機能します。および「警告を使用する」。
パッケージとグローバル変数を使用しようとしましたが、失敗しました。
パッケージ変数は、パッケージ外にエクスポートする変数用であり、同じパッケージ内の 2 つのサブルーチン間で共有したい変数用ではありません。
使用しないでくださいmy
:
#!/usr/bin/perl
sub foo() {
$myvar = "Hello\n";
}
sub foo1() {
$myvar1 = $myvar;
print $myvar1;
}
print "here we go!\n";
foo();
foo1();
ただし、このプログラミング方法はお勧めしません。
いくつかのアプローチがあります。
最も簡単なのは、変数をで宣言しないことですmy
。ただし、これを回避する必要がありuse strict;
、結果として推奨されません。
スクリプトの上部にある関数の外で変数を宣言できます。この変数は、以下のすべての関数で使用できます。これはスコープの結果です。変数は、中括弧のセットの外側で宣言し、通常、後続の中括弧の内側で使用できます。
use vars qw/$myvar/;
プラグマを使用して変数を宣言できます。これにより、本質的に、次のコード全体で変数を使用できるようになります。
次のコードは、説明した内容に対する解決策を示している可能性があります。
#!/usr/bin/perl
use strict;
my $var = "hello";
sub foo {
local *var;
print "$var world\n";
$var = "hi";
}
sub bar {
local *var;
print "$var world\n";
$var = "hey";
}
foo();
bar();
print "$var world\n";
結果は次のようになります。
hello world
hi world
hey world