WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:サブルーチンの変数受け渡し・引き取り

0:[投稿] perl初心者 [2004/01/26 19:17 ][環境:Windows2000 UNIX]

こんばんは。perlを始めたばかりの者です。
今現在、サブルーチンにチャレンジ中ですが、
引数の受け渡しについてご教授願いたく投稿しました。

#!/usr/local/bin/perl
use Date::Manip;

my $jikan = "20040126190000"; #[YYYYMMDDHHMMSS形式]

&jikan01($jikan);

sub jikan01{
$jikan = &UnixDate($jikan,"%s");
return $jikan;
}

&jikan02($jikan);

sub jikan02{
 my ($filename) = $ARGV[0];
 my $syorisuu = utime($jikan,$jikan,$filename);

if($syorisuu <= 0){
  print "utime実行×\n";
 } else {
  print "utime実行○\n";
 }
}

上記のようなソースを書きましたが、&jikan01の$jikanを
myをつけて局所的に有効にしたいと思っています。
このままmyをつけてしまうと、次のサブルーチン&jikan02に
$jikanが渡せません。どなたかご教授願えませんでしょうか?
よろしくお願い致します。


1:[回答] perl小僧 [2004/01/26 23:44 ]

&jikan01(\$jikan);
&jikan02(\$jikan);
詳しくは「リファレンス」をキーワードに検索
というか解説本を買いましょう。


2:[回答] gun [2004/01/27 09:24 ]

[とほほのWWW入門]
http://tohoho.wakusei.ne.jp/www.htm


3:[保留] perl初心者 [2004/01/27 16:43 ]

perl小僧さま、gunさま

ご返答、ありがとうございます。
時間を見つけて実行してみます。
ありがとうございました。
念のため、保留にさせてください。


4:[回答] gun [2004/01/28 11:37 ]

>2 では少し不親切な気がしましたので。。。

my はサブルーチンの中で使わないといけません。
外で宣言しても大域変数になってしまうでしょう。

また、大域変数として宣言した変数名と同名で
my を行った場合にどうなるかは分かりませんが、
多分良くないことが起こると予想されます。
変数の有効範囲を考えながら使用するよう心掛けましょう。
(下の場合、main01内、jikan01内、jikan02内の$jikanは
それぞれ別個のものとなります)

#!/usr/local/bin/perl
use Date::Manip;

&main01;

sub main01 {
    my $jikan = "20040126190000"; #[YYYYMMDDHHMMSS形式]
    my $filename = $ARGV[0];
    $jikan = &jikan01($jikan);
    &jikan02($jikan, $filename);
}

sub jikan01{
    my $jikan = shift;
    $jikan = &UnixDate($jikan,"%s");
    return $jikan;
}

sub jikan02{
    my $jikan = shift;
    my $filename = shift;
    my $syorisuu = utime($jikan,$jikan,$filename);
    if($syorisuu <= 0){
        print "utime実行×\n";
    } else {
        print "utime実行○\n";
    }
}


5:[回答] 通りすがり [2004/01/28 19:34 ]

>>1
&jikan02(&jikan01($jikan));

>>4
> my はサブルーチンの中で使わないといけません。
そんな事はありません。

> 外で宣言しても大域変数になってしまうでしょう。
どこであろうが my で宣言されればレキシカル変数だと思います。
ブロックの外で宣言された場合、ファイルスコープのレキシカル変数になりますが
グローバル変数とは別物でしょう。
(嘘かもしれないので、詳しい人のフォローが欲しいところ)

> また、大域変数として宣言した変数名と同名で
> my を行った場合にどうなるかは分かりませんが、
> 多分良くないことが起こると予想されます。
僕は全く問題無いと思いますが、例えばどんな事が予想されるのでしょうか?


6:[回答] gun [2004/01/29 09:18 ]

数々の間違い発言して申し訳ありません。
ご訂正ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World