• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:$port = shiftで取り出されているもの)

$port = shiftで取り出されているもの

このQ&Aのポイント
  • Perlプログラムの一部である$port = shiftの使用方法に関する質問です。
  • そのままではエラーになるため、引数に@ARGVを追加して使用しているが、この対処方法は妥当かどうかを尋ねています。
  • また、なぜこのようなコードになっているのか、作者の意図や理由を知りたいとも考えています。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

推測ですが shift の引数が省略された時には @ARGV が引数になるので 元々のプログラムでは、 メインで $port = shift or die "error."; になっていたところを、 portget(); に後から置き換えたんだと思います。 ところが、ご指摘にように、 サブルーチン内では、 shift の引数は省略時には、@_ を対象としますから、 間違いです。 おそらく、置き換えた時に修正するのをうっかりしたんだと思います。

noname#17299
質問者

お礼

うっかり間違いだったんですね。 きちんと作ってそうなサイトでも間違えていることもあるんですね。 でも、動作確認してれば間違えることはないですね。 やはりプログラムは検証が必要だと改めて思いました。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • パスワードなので、●●●●●と表示したい

    こんにちは。Perlを勉強中です。ご回答よろしくお願いいたします。 test.plを作成しました。 実行方法は、引数(userid)をつけて実行します。 perl test.pl userid すると、パスワードをきいてきて、 passwd:●●●●●  入力した文字が $passwdに格納され、表示は●で表示されるようにしたいのですがどうしたらよいでしょうか? なお、引数(userid)の部分は、$userid = shift @ARGV; を使っています。 $useridと$passwdで認証をしたいと思っています。 どうぞよろしくお願いいたします。

  • 以下のperlのプログラムについて教えて下さい。

    次のプログラムは”多くのファイルの名前を一度に変更する”です。 (参考書から持ってきました) perlの初心者、というよりパソコンの初心者で参考書等で調べても わからないことが多く困っています。 #! /usr/bin/perl $op = shift or die"Usage: rename expr [files]\n"; chomp(@ARGV = <STDIN>) unless @ARGV; for (@ARGV) { $was = $_; eval $op; die $@ if $@; rename($was,$_) unless $was eq $_; } 質問 1. opは何ですか? 2. Usageは何ですか? 3. exprは何ですか? 4. ARGVは何ですか? 5. evalは何ですか? 6. wasは何ですか? 7. eqは何ですか? 8. このプログラムにおいてファイルは    どこのディレクトリでもリネーム出来るのでしょうか? 9. 出来ればプログラムの一行一行について説明をして下さい。 勉強不足で申し訳ありませんが、急ぎで知りたいので 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • perlの引数でオプションとオプションなしの両者を扱える方法

    test.pl -a -b opt file.txt のようにオプション付きの引数とそうではない場合の引数を準備したいのですが、どの様にしたら良いのでしょうか? イメージ use Getopt:Std; getopts('ab:); if($opt_a){...} if($opt_b){...} open(IN, "$ARGV[0]") || die "error"; ... 上手くいかなかったです↑↑↑

  • evalの使い方 引数として式を与える

    引数として与えた式を、プログラム中で計算するようにしたいと思っています。 引数に変数を入れることはできないのでしょうか? 将来的には、ファイルを開いてそれぞれの、ファイルごとの定数を式に代入しようと考えています。 よろしくお願いします。 プログラム ################################### my $bb =2; my $str = $ARGV[0]; eval $str; print "$str\n"; 実行文 #################################### perl test.pl 2*3+\$bb 結果 #################################### 2*3+$bb 望んでいる結果 8

    • ベストアンサー
    • Perl
  • 以下のperlのプログラムについて

    以下は、多くのファイルの名前を一度に変更するための プログラムのはずなのですが・・・(参考書からもってきました) 分からないところがあるので教えて下さい。 #! /usr/bin/perl/ $op = shift or die"Usage: rename expr [files]\n"; chomp(@ARGV = <STDIN>) unless @ARGV; for(@ARGV){ $was = $_; eval $op; die $@ if $@; rename($was,$_) unless $was eq $_; } 1. opは何ですか? 2. Usageは何ですか? 3. exprは何ですか? 4. ARGVは何ですか? 5. wasは何ですか? 6. $_は何ですか? 7. eqは何ですか? 8. ファイルはどこのディレクトリに入っているものか  宣言しなくていいのですか? 9. できれば、プログラムの一行ずつ教えて頂けると助かります。 perlの初心者、というよりパソコンを使う事自体が 初心者でわからないことが多く困っています。 参考書でいろいろ調べましたが、まだ分からなくて・・・ 勉強不足で申し訳ありませんが宜しくお願い致します。

    • ベストアンサー
    • Perl
  • flockの挙動がおかしい。。。

    おそれいります。 親プロセスから子プロセスを複数呼び 子プロセスが全て終わった後に次の手順に移行する。。。という処理をflockを使って作っているのですが、 うまくいきません。 下の「main.pl」を実行すると、「lock.pl」を10回呼び出して、 すべて終了したら「OK」と表示したいです。 lockというファイルを全部のプロセスで共有して、 子の全部の処理が終わった時点で、mailにロックが移る。。。という動きを想定したのですが、 なぜか、数回実行しているとMAIN LOCK(1) が最後に発動しているにもかかわらず、 子プロセスが終了していないのに「OK」の表示を出してしまいます。 flockは順番を守らないのでしょうか・・・・????? どのようにしたらうまく動くでしょうか。。。。 ==> main.pl <== #!/usr/bin/perl use Fcntl ':flock'; for (1..10){ system("./lock.pl $_ &"); } sleep 5; # 子プロセスが開始するまで待つ print qq("MAIN LOCK\n"); # ... (1) open LC,"+<lock" or die; flock LC,LOCK_EX; sleep 1; print qq("OK\n"); ==> lock.pl <== #!/usr/bin/perl use Fcntl ':flock'; print qq(lock $ARGV[0]\n!); # ... (2) open LC,"+<lock" or die; flock LC,LOCK_EX; sleep $ARGV[0]; print qq(release $ARGV[0]!\n);

    • ベストアンサー
    • Perl
  • unixのperlで

    UNIXのPerlでは引数は@ARGVに入ると思うのですが、 a.pl *.c "*.c" という引数を入れるとファイルが展開されそのフォルダの中の "12-1.c" とか "12-2.c" とかいう引数が、配列に1つずつ入ってきました。 引数の文字列を何の修正もなしに(できればスペースも)受け取る方法はないですか?

    • ベストアンサー
    • Perl
  • perlでcsvファイルから複数行を抽出したい

    プログラミング初心者です。 お知恵をお貸しください。 perlでcsvファイルから任意の複数行を、コマンドライン引数を使って抜き出したいです。 1行だけだとうまくいきますが、以下ではすべてのcsvデータが出力されてしまいます。 ----------------------getcsv.pl ここから---------------------- #!/usr/bin/perl -- use strict; use warnings; open(IN, "<adata.csv"); open (OUT, ">$bdata.csv"); while(<IN>){ if($. == $ARGV[0] || $ARGV[1] || $ARGV[2] || $ARGV[3]) { print OUT $_; } } close(IN); close (OUT); ----------------------getcsv.pl ここまで---------------------- ----------------------コマンド ここから---------------------- perl getcsv.pl 1 3 8 10 ----------------------コマンド ここまで---------------------- よろしくお願いします。

    • ベストアンサー
    • Perl
  • .forwardから呼び出すperlプログラムに引数を付ける事は可能ですか?

    はじめまして。Perlの初心者ものです。 よろしくお願い致します。 .forwardから呼び出すperlプログラムに引数をつけて プログラム内で引数とメール内容を処理に使用したいので すが、出来るのでしょうか? 例えば.forwardの中身を |/XXX/test.pl p1 と、記入して、 test1.pl内で引数によって、メールの内容を違ったファイルに保存したいです。 よろしくお願い致します。

  • shとperlのデータ連携&perl出力

    初めて記載します。宜しくします。 perlでプログラムするのが初めてでなので、大分間違ってるかもしれません。 ※UNIX環境でシェルで日付差分(yyyymmddhhmmss)を求めたいのですが、「date -d」コマンドは使用出来ません。 シェルを実行しコマンドラインにて入力された【引数1】:実行区分(1 or 2)【引数2】:日付(yyyymmddhhmmss)、【引数3】:日付(yyyymmddhhmmss)と区分をperlに引数として渡して、perlでは"引数3-引数2"をして日数を算出しファイルに出力させたいです。 perl名:MCPFZAR_Compl.pl 実行コマンド例: perl MCPFZAR_Compl.pl 1 20110302000000 20110306000000 以下にperlのプログラムを掲載します。 #!/opt/perl/bin/perl ⇒入力パラメータチェック実行 # 日付1を年、月、日、時、分、秒に切り分け $L_Year = int(substr($ARGV[1],0,4)); $L_Mon = int(substr($ARGV[1],4,2)); $L_Day = int(substr($ARGV[1],6,2)); $L_Hour = int(substr($ARGV[1],8,2)); $L_Min = int(substr($ARGV[1],10,2)); $L_Sec = int(substr($ARGV[1],12,2)); # 取得日付チェック関数を実行する。 ($L_Ret, $L_Ret_Msg) = &MCPFLCF_DayExists($L_Year, $L_Mon, $L_Day, $L_Hour, $L_Min, $L_Sec); # 異常終了した場合 if( $L_Ret != 0 ){ # エラーを返却する。 return ($L_Error_End, "$L_Err_MSG_4 [$L_Ret_Msg]"); } # 日付1を秒に変換 $L_Time1 = timelocal($L_Sec, $L_Min, $L_Hour, $L_Day, $L_Mon - 1, $L_Year); ⇒同様に日付2も変換 # 日付1と日付2の差分を取る。 $L_TimeRet = ($L_Time2 - $L_Time1); # ファイルに書き込む為に、ファイルopenしてから書込み open (OUT,"> $outfile"); # 結果形式種別が1の場合 if($ARGV[0] == 1){ # 結果を日数で参照渡しする。 $L_LET = int($L_TimeRet / (60 * 60 * 24)); print OUT "$outfile"; } # 結果形式種別が2の場合 elsif($ARGV[0] == 2){ # 結果を秒で参照渡しする。 $L_LET = $L_TimeRet; print OUT "$outfile";; # CLOSEする close(OUT); シェルを実行すると、エラーにはなりませんが ファイルの出力もされません。 かなりどうしたらよいかわからない状態なので回答宜しくお願い致します。 足りない情報がありましたらご教授願います。

    • ベストアンサー
    • Perl
謎の行動について
このQ&Aのポイント
  • 自分の女友達の行動について不思議な点があります。友達との約束時間よりも早めに出かけ、食事に行った後にまた別の食事をするなど、疑問を感じます。
  • 私の女友達の行動について疑問を感じます。友達との待ち合わせ時間よりも早く出発し、ランチを済ませた後に再び食事をするなど、不自然な行動があります。
  • 私の女友達の行動には謎があります。友達との約束時間よりも早く出かけ、その後また別の場所で食事をするなど、不思議な行動が続いています。
回答を見る