以下の2つの関数から「内部変数」「引数」「戻り値」がどれかを知りたいのですが、
戻り値:「$esc_0208」「$esc_asc」
引数:なし
であっているでしょうか?
変数は「$esc_0208」と「$esc_asc」のようにも思えるのですが、変数であり戻り値でもあるということでしょうか?
sub jis_inout {
$esc_0208 = shift || $esc_0208;
$esc_0208 = "\e\$$esc_0208" if length($esc_0208) == 1;
$esc_asc = shift || $esc_asc;
$esc_asc = "\e\($esc_asc" if length($esc_asc) == 1;
($esc_0208, $esc_asc);
}
sub get_inout {
local($esc_0208, $esc_asc);
$_[$[] =~ /($re_jis0208)/o && ($esc_0208 = $1);
$_[$[] =~ /($re_asc)/o && ($esc_asc = $1);
($esc_0208, $esc_asc);
}
No.3ベストアンサー
- 回答日時:
$esc_0208 = shift || $esc_0208;
これは以下のようなことを一度にやっていると解釈してください。
# @_ (サブルーチンの引数リスト)の先頭から一つ shift (取り除いて)
# $esc_0208 に代入する
$esc_0208 = shift(@_);
# $esc_0208 の内容が 0 || '' || undef だったら $esc_0208 の
# 値を代入する
$esc_0208 = $esc_0208 unless($esc_0208);
また、サブルーチンなどの戻り値は最後に処理された値です。
例えば
sub test {
1;
}
は
sub test {
return 1;
}
と同じ意味だし、
sub test {
("test", 1);
}
は
sub test {
return ("test", 1);
}
と同じ意味になります。
どちらかというとPerlの基本を学び直した方がよいように思います。
Perlはこういった省略記法が多く存在するので同じ事をするにも
複数の書き方があり、びっくりするようなこともあります。
No.2
- 回答日時:
引数と戻り値については、仕様としては
http://mikeneko.creator.club.ne.jp/~lab/kcode/jc …
> jis_inout($b2, $b1)
> この関数は、変更後のエスケープシーケンスのリスト ($b2, $b1) を返します。
> get_inout($string)
> 返す値の形式は、jis_inout() と同様に、($b2, $b1) の形式です。
と書かれてるとおりです。
○引数について
・jis_inout
関数の引数は配列「@_」に代入されてきます。
shiftは配列の左端の要素を返し、その要素を配列から削除します。配列を指定しない場合は@_を対象にします。
つまり、
> $esc_0208 = shift || $esc_0208;
> $esc_asc = shift || $esc_asc;
は
> $esc_0208 = $_[0] || $esc_0208;
> $esc_asc = $_[1] || $esc_asc;
と等価です。
・get_inout
「$_[$[]」で、$_[0] を指定したことになります。つまり、第1引数が正規表現にマッチするかどうかを調べています。詳しくは特殊変数「$[」について調べてください。
○戻り値について
perl では、return文が無い場合は、一番最後に評価した式を戻り値とします。
どちらの関数も最後に「($esc_0208, $esc_asc);」という式がありますから、このリストが戻り値になります。
○変数について
jis_inout では二つの変数「$esc_0208」「$esc_asc」が使われていますが、この変数は関数外で用意されたグローバルなものです。
関数呼び出し終了後も、その値は保持されつづけます。また、jis_inout の引数を指定しなかった場合は、保持している元の値をそのまま使っています。
get_inout の方では、二つの変数「$esc_0208」「$esc_asc」が使われていますが、この変数はget_inout関数下でのみで有効なローカルなものです。
関数が呼び出されるたびに毎回「undef」で初期化されます。
> 変数であり戻り値でもあるということでしょうか?
変数の最終的な値を、戻り値にしている、と言うことです。
例えば、
「return 1;」って文があったら、戻り値は「1」です。
「return $a+1;」って文があったら、戻り値は「$a+1」(変数$aの値に1を足したもの)です。
「return $a;」って文があったら、戻り値は「$a」(変数$aの値)です。
この回答への補足
jis_inout
変数:"$esc_0208"と"$esc_asc"
引数:"$_[0]"と"$_[1]"
戻り値:"$esc_0208"と"$esc_asc"
get_inout
変数:"$esc_0208"と"$esc_asc"
引数:"$_[0]"
戻り値:"$esc_0208"と"$esc_asc"
以上でよろしいでしょうか?
No.1
- 回答日時:
なんかの課題ですかね?
そうだとしたら直で答えを教えることはできないので参考になるところだけのせときます。
http://www.site-cooler.com/kwl/perl/9.htm
戻り値は上のurlの「結果の戻し」の「return を用いない場合」のところ
内部変数は「変数のスコープ」のあたり、引数は「引数の受け取り」のあたり
引数あたりのヒントとして
・shiftのあとに@_ が省略されていること
・$_[$[]のは$_[0]と同じ意味であること
を、加味して自分で考えてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オンラインゲーム apexについて キーボードでデスボックスを漁っている時にescキー以外で漁るのを止める方法はありま 1 2023/05/19 10:30
- タブレット Windowsタブレットの質問です。全画面表示を解除したいです。 タブレットモードにして「PDF X 1 2023/04/18 00:56
- ノートパソコン Thinkpad 故障 メモリ?だけとる 3 2023/03/12 11:12
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) vba sendKeysを送る相手のソフトを前面に開くには 1 2023/07/20 16:42
- Windows 10 mbr(マスタブートレコード)を修復したい 2 2022/07/21 21:16
- CPU・メモリ・マザーボード pcの質問です。電源を入れると起動してすぐ消え、その3秒後にまた起動するようになりました。 3 2023/06/10 19:49
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- がん・心臓病・脳卒中 HPV 18型、軽度異形成について はじめにASC-USと診断され、HPV検査したところ18型に感染 10 2023/02/11 15:41
- Excel(エクセル) 全角文字「ヴ」の半角文字「ヴ」への変換方法について 3 2022/11/05 12:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミング 部分入れ...
-
Strawberry Perl for Windows ...
-
アルファベットに付いて質問し...
-
Perlで同じフォルダにある任意...
-
perlでリテラル値はメモリにど...
-
ペプシコーラとコカ・コーラとD...
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
perlで2次元配列をサブルーチ...
-
perlのrequireの動き方について...
-
perlについての質問
-
Blenderについて
-
Perl の外部モジュールの利用方法
-
perl このテキストファイルを簡...
-
Perlでファイルの末尾から指定...
-
秀丸での一括変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Perl の外部モジュールの利用方法
-
Perlで特定文字列から特定文字...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
perlでリテラル値はメモリにど...
-
画像が表示でnull; this.src
おすすめ情報