• ベストアンサー

Perlで複数の値を返す良い方法はありますか?

以下のように多重代入できるかと思って確かめましたが、 結果は以下の通りでした。 $a=[] $b=[20] 方法はいろいろとありそうですが、Perl苦手でわかりません。 sub test{ local $cc = ''; local $s = ''; $cc = 'AAAAA'; $s = 20; # return $cc, $s; } $a, $b = &test; print "\$a=[$a]\n"; print "\$b=[$b]\n"; exit; __END__

  • Perl
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • estea
  • ベストアンサー率44% (39/87)
回答No.3

リファレンスもアリ。 ------------ sub test{ my $cc = 'AAAAA'; my $s = 20; # return [$cc, $s]; } $a = &test; print "\$a=[$a->[0]]\n"; print "\$b=[$a->[1]]\n"; exit; ------------------ あと、返答はしたほうがいいと思うでぇ。 そのまま放置プレイされるのもあんまり気持ちよくないし。

その他の回答 (2)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

・リスト ($a,$b) = &test; sub test { ~略~ return ($cc,$s); } ・配列 @get = &test; sub test { ~略~ return @return; } ところで「Perlで Right関数に近い処理をさせたいのですが、何か良い方法は無いでしょうか?」に対しての返答・お礼はしないのですか?(回答してくれた方に対して失礼ですよ)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

リスト形式でリターンしてみては。 sub test{ local $cc = ''; local $s = ''; $cc = 'AAAAA'; $s = 20; # return ($cc, $s); } ($a, $b) = &test();

関連するQ&A

  • Perlで参照のクリアの方法

    Perlで参照のクリアで困っているのですが、以下のソースで正しくクリア方法はありますか? use strict; use warnings; use Data::Dumper; sub test { my ($arrayref) = @_; $$arrayref[2]{'A'} = 'aaaaa'; #$$arrayref = (); # Not a SCALAR reference at test_0042.pl line 10. $arrayref = (); #←クリアしているが、Dumperするとクリアされていない } my @A = (); print Dumper(@A); print "\n"; test(\@A); print Dumper(@A); print "\n"; exit; __END__ $VAR1 = undef; $VAR2 = undef; $VAR3 = { 'A' => 'aaaaa' };

    • ベストアンサー
    • Perl
  • perlでLocation

    Locationでは#xxxというのは使えないのでしょうか? #!/usr/local/bin/perl print "Location:xxx.cgi#xxx/?userID=$name\n\n"; exit; という風に書いています。 xxx.cgiはローカルにあるcgiでそのcgiの中身は表示できます。 しかしxxx.cgiの中の <xxxx.cgiの中身> print <<"EOM"; <html> . . . <A NAME="xxx>image</A> . . . </HTML> EOM exit; xxxのところでなく一番最初が表示されてしまいます。 どうすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • Perlで<select multiple>の複数データを取得する方法

    Perlで、<select multiple>のデータを取得する方法を教えてください。 以下のように複数選択できるselectタグがあります。これで送信したデータを Perlで受けると、ARRAY(0x9bf0d18)のようになってしまいます。 環境は、以下のとおりです。(必要な部分だけ記載しています) ■送信元のHTML <select name="test" size="3" multiple> <option value="a">a <option value="b">b <option value="c">c </select> ■受け側のPerl use CGI_Lite; my %in = $cgi->parse_form_data(); print"Content-type: text/html\n\n"; print"$in{'test'}\n"; ■結果 ARRAY(0x9bf0d18) 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlのファイルのアップロードの方法についてお聞きします。

    Perlのファイルのアップロードの方法についてお聞きします。 &ReadParseを用いた方法で、 $file = $in{'TENSOU'};で$file自体にデータが入るので 簡単だなと思っていましたが、送信元と送信後のファイルが若干違っていました。 使い方が間違っているのでしょうか? 以下、サンプル ◆HTML側 <FORM ACTION="up.cgi" ENCTYPE="multipart/form-data" METHOD="POST"><P> ファイル: <INPUT TYPE="file" NAME="TENSOU" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> ◆Perl側 &ReadParseの例を用いた方法 #!/perl/bin/perl #!/usr/local/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); #--->エラー対策 require 'cgi-lib.pl'; require 'jcode.pl'; $BUFSIZE = 2048; &ReadParse; # ==> 強力な変換 $file = $in{'TENSOU'}; # ==> 実態自体がデータなので、取り扱いしやすい $file_size = length($file); $file_size *= ($BUFSIZE / 1024); open(OUT, "> test.jpg"); print(OUT $file); close(OUT); print "Content-type: text/html\n\n"; print "$file_size(KB)<br>\n"; print "<a href=\"test.jpg\">テスト</a>\n"; exit;

    • ベストアンサー
    • CGI
  • perlのバージョンによる動作の違い

    perl5.6.0と5.6.1で挙動が違って困っちゃってます。 $a = "abc[test]de[test]fgh[test]ij"; @b = ($a =~ /(.*?)\[test\]/sg); print join("|", @b); exit; LINUXでperl5.6.0だと abc|de|fgh LINUXでperl5.6.1だと abc どっちがバグでしょうか? #取り敢えずプログラム自体はsplitで代用して動かしました

  • Win98+PWS4.0でPERLが動作しません

    Win98+PWS4.0でPERLを動作させたいのですがうまくいきません。 ディレクトリ「Inetpub」-「scripts」へTEST.PLという名で 下記のプログラムを入れて実施すると、 --------------- #!/user/local/bin/perl print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<p>\n"; print "Hello\n"; print "</p>\n"; print "</body>\n"; print "</html>\n"; --------------- HTTP エラー 403 403.1 許可されていません: 実行アクセスは許可されていません --------------- と出ます。 レジストリの設定は ".pl",".cgi”とも「C:\Perl\Bin\Perl.exe %s %s 」として、 PWSの設定で「scripts」は”実行””スクリプト”とも チェエク入をれています。 「wwwroot」のルートへ置いても同様のエラーが発生します。 DOS窓から「Inetpub」-「scripts」内でTEST.PLとすると 正常に表示はされます。 PerlへのパスもC:¥から実行確認済みです。 何が原因と考えられるでしょうか。 宜しくご教示お願いします。

  • perlの内容なのですがこれで合っていますでしょうか?

    print 関数は文字列や数値だけでなく、変数を指定してその値を表示することもできます。 $a=1; 1を$aに代入する。 print $a; 変数$aの値を表示させる。 $a=2; 変数$aに2を代入する。 $b=3; 変数$bに3を代入する。 print "変数\$aに変数\$bを代入\n"; 「変数$aに変数$bを代入」という文字を表示させて改行する。 $a=$b; 変数$bの値を変数$aに代入する。 print "\$a="; 「$a=」を表示させる。 print $a; 変数$aの値を表示させる。 print ",\$b="; 「,$b=」を表示させる。 print $b; 変数$bの値を表示させる。 print "\n"; 改行を表示させる。 実行結果は↓↓↓↓↓↓↓ 変数$aに変数$bを代入 $a=3,$b=3 変数の書き方 文は ; で区切るが、1行に並べることも可能。 $a=2; $b=3; ↓ $a=2; $b=3; 複数の変数に、同時に値を代入することも可能。 $a=2; $b=2; ↓ $a=$b=2;

    • ベストアンサー
    • Perl
  • htmlからテキストを返すperlを実行する方法

    アクセスカウンターの数字画像を出力するperlのcgiを、<img>タグで、 <img src="./counter.cgi"> と、呼び出す方法があると思いますが、これと同じように、画像ではなくテキストを出力するperlのcgiをhtml中に呼び出して、ブラウザに表示する方法はないでしょうか? 以下のような感じかと漠然と思ったのですが、やはり上手くいくはずはありませんでした。 ■cgiプログラム(test.cgi) #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "TEST TEXT"; exit 0; ■htmlファイル <html><head></head> <body> <br> <hr> <object data="./test.cgi" type="text/plain"></object> <hr> </body> </html> perlもhtmlも独学で学んだ基礎レベルだと自分で思っています。 どなたか突破口となるヒントをお願いします。

    • ベストアンサー
    • Perl
  • 「Perl」ハッシュの使い方について

    Perlのハッシュで気軽に多次元配列のようなことをしたいのですができますか? (下記のコードで一応動きましたが、本当にこういった機能があるのか自信がもてません。) もし、可能である場合、 $fruits{'apple'}{'甘い'} = "リンゴ"; $fruits{'melon'}{'甘い'} = "メロン"; 以外の代入方法があれば教えてください。 また、 print values %$fruits; が表示されません。 表示させる方法はありますか? 以上、ご存知の方、居られましたらぜひ教えてください。 宜しくお願い致します。 -test.cgi----------------------------------------- print "Content-Type: text/plain\n\n"; $fruits{'apple'}{'甘い'} = "リンゴ"; $fruits{'melon'}{'甘い'} = "メロン"; print '結果:'.$fruits{'apple'}{'甘い'}; print "\n"; print '結果:'.$fruits{'melon'}{'甘い'}; print "\n"; print keys %fruits; print values %$fruits;# <<表示されない exit; -----------------------------------------

    • ベストアンサー
    • CGI
  • Perl あっていますでしょうか?

    " " と ' ' の相違は? ""の内にある変数名は、その値に変換されます。 ''の内にあるものは、そのまま文字列として扱われます。 エスケープシーケンスは "" の内に記述した場合のみです。 $a="Hello"; 文字列Helloを変数$aに代入する。 $b="$a"; 変数$aを変数$bに代入する。 $c='$a'; $aという文字列を変数$cに代入する。 ""の内で""を使うことは出来ません。 ''の内で''も使うことは出来ません。 使うときはエスケープシーケンスを使います。 print "\"Hello\"\n"; 文字列"Hello"を表示させます。 print "'Hello'"; 'Hello'を表示させます。 ""の内で''又は''の内で""を使うことは出来ます。 $a="あいうえお"; 文字列 あいうえお を変数$aに代入する。 print "\n$a\n"; 改行して あいうえお表示して 改行する。 print '\n$a'; 文字列\n$aを表示する。 文字列の結合 . (ピリオド)を使って前後の文字列を連結することが可能です。 $a="Hello"." "."World"; 変数$aに文字列Helloと半角スペースとWorldをつないだものを代入します。 $a="c"x3; 変数$aに文字cを3回つないだものを代入します。 $a="A"; 文字Aを変数$aに代入する。 $b="B"; 文字Bを変数$bに代入する。 $c="C"; 文字Cを変数$cに代入する。 print $a.$bx3.$c; 文字Aと文字Bを3回結合したものと文字Cを表示する。 画面にはabbbcと表示されます。

    • ベストアンサー
    • Perl

専門家に質問してみよう