CGI-BBS > CGI > Perl > サブルーチンを使いこなしたい。


カレッヂ
カレッヂ


質問者 宇宙のステルヴィア  投稿日 2003/12/26(金) 22:52:38
サブルーチンって非常に便利ですよね。
サブルーチン名を呼び出せば何回も使いえるのですから。
でも、使っているうちにもっと使いこなしたくなり、
サブルーチンに対しての質問をさせていただきます。

サブルーチンを呼び出すとき値を渡す(引数)方法はわかるのですが、
例 &mike ('hoge1');
サブルーチン中にある値($変数)をインポートさせるにはどうすればよいのですか?

私の考え(予想)
&mike ($name);

どうか教えてください!

プロバイダ参照:http://www.mirai.comm.to/
サーバのOS:(未選択)
パソコンのOS:(未選択)
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:advanced

回答者 ただのおっさん  [削除]  投稿日 2003/12/27(土) 18:58:39
#! /usr/local/bin/perl

$a = 'Perl';
$b = 100;

($c,$d) = test_sub($a,$b);

print "$a $b\n\n";
print "$c $d\n\n";
exit;


sub test_sub {
    my ($l,$m) = @_;

    $l = "$l Test Program";
    $m = $m + 20;

    return ($l,$m);
}
質問者 宇宙のステルヴィア  [削除]  投稿日 2003/12/28(日) 00:28:44
return ($l,$m);
はサブツーチン内の値を返す関数ですよね。
ということは…
($c,$d) = &test_sub($a,$b);
$l は $c に代入
$m は $b に代入
されているという事でしょうか?
回答者 ただのおっさん  [削除]  投稿日 2003/12/28(日) 18:53:08
そう言うことです。

ちなみに、メインルーチンの変数などを、
複数のサブルーチンで利用する場合は、
リファレンスを使用すると良いかも。
↓を参照

#! /usr/local/bin/perl

$a = 'Perl'; $b = 100; $c = '';

print "$a $b $c\n\n";

$c = &test_sub(\$a,\$b); # \$a \$b は、$a $b のリファレンス 

print "$a $b $c\n\n";
exit;

sub test_sub {
	my ($l,$m) = @_; # $l $m は、メインルーチンから渡されたリファレンス

	$$l = "$$l Test Program"; # $$l $$m は、リファレンスの示す場所。
	$$m = $$m + 20;           # ここでは、$a $b の内容になる。
	return('OK');
}


質問者 宇宙のステルヴィア  [削除]  投稿日 2004/1/15(木) 11:09:55
参考になりました。
問題解決にご協力くださってありがとうございます。

このページは終了したので返信(回答)は書きこめません
 


Web裏技