![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
s/// のオプションである e, g, i, o, x のそれぞれの意味は理解できていますか?
まあ上の書き方が素直だとはあまり思えないが. 結果は
$hoge = qq(hogehoge) if $hogehoge =~ s/<文字列>/hogehoge/egiox; $_ = $hoge;
と同じじゃないかなぁ. 「hogehoge」が (2個じゃなく) 1個ですむってのが「利点」といえば利点だけど....
No.4
- 回答日時:
念の為 s/old/new/egiox において修飾子の意味だけ書くと
・e: new を (文字列そのものではなく) eval した結果で置き換える (e が複数個あればその回数だけ eval を繰り返す)
・g: old にマッチする全ての場所で置換を実行する
・i: old の大文字/小文字を無視する
・o: old を最初にこの部分を実行した 1回だけ評価する
・x: old に空白とコメントを許す
くらいでしょうか. だから,
s/<文字列>/hogehoge/egiox
だと「hogehoge を eval した結果」で置き換えます (hogehoge というサブルーチンがなければエラーになる).
No.3
- 回答日時:
「o修飾子⇒一回評価」というのはある意味正しいんだけど, 「修飾子gとoではどちらが評価されるのでしょうか?」という質問が出るということはおそらく「何を」 1回評価するのかについて誤解している.
たとえば
sub replace {
my ($target, $pattern, $replace) = @_;
$target =~ s/$pattern/$replace/;
}
my %replaces = (hoge => 'foo', ge => 'bar');
for my $pattern (keys %patterns) {
print qq("replace '$pattern' in 'hogehoge' by '$patterns{$pattern}': ), replace("hogehoge", $pattern, $patterns{$pattern}), "\n";
}
で s に o をつけた場合とつけない場合の違いを比較してほしい. でもって, 違いが分かれば「修飾子gとoではどちらが評価されるのでしょうか?」という疑問が無意味であることが理解できるかもしれない.
もちろん Perl のマニュアルには (あんまり「きちんと」って感じじゃないけど) 書いてある.
No.2
- 回答日時:
あ, しまった. 「hogehoge」の内容にもよるけど, 本当に
$hogehoge =~ s!<文字列>! do{ $hoge =qq(hogehoge);} !egiox; $_ = $hoge;
の通りなら #1 の
$hoge = qq(hogehoge) if $hogehoge =~ s/<文字列>/hogehoge/egiox; $_ = $hoge;
は
$hoge = qq(hogehoge) if $hogehoge =~ s/<文字列>/hogehoge/giox; $_ = $hoge;
の間違い.
hogehoge に変数の参照があると別の話になる.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL 【PostgreSQL】行の値の並びを変えるには 1 2023/03/21 16:46
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- JavaScript javascriptで文字挿入でtoggleみたいなのはありますか? 2 2023/02/14 21:53
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
splitの逆の処理
-
ファイルから文字列を読み出し...
-
複数の比較( =~ )を効率よく...
-
'\\"'はなの意味ですか
-
Perlで Right関数に近い処理を...
-
CSVファイルの中で、「 , 」カ...
-
何故、日本は未だに数字を3桁...
-
住宅にカナを入力する際に丁目...
-
英数字のみ全角から半角に変換
-
プログラミングでは、半角括弧...
-
何故、日本は未だに数字を3桁...
-
正しいメールアドレスの形式で...
-
スマホの予測変換について
-
C#でcsvファイルの列を入れ替え...
-
全角英数字の必要性が理解できない
-
カンマ区切りの数字をCSVフ...
-
PHPの文字化けについて
-
Excel VBAでオートシェイプ内の...
-
文字コードの%E3%80%とは何です...
-
EXCELからCSVにすると余計なカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
Malformed UTF-8 character
-
GDBでデバッグするとき文字列の...
-
文字列と数字を含むセルから数...
-
Perl/Tk使用時のUTF-8コード文...
-
日本語文字列の指定長(byte)切出し
-
数字を文字列に変換し短縮化する
-
splitの逆の処理
-
Perl(Windows)の文法について
-
Perlで Right関数に近い処理を...
-
perlを使用しての特定行抽出に...
-
トリッププログラム!?
-
関数chop
-
正規表現での文字の抜き出し
-
プログラミング HSPの変数につ...
-
ワイルドカード処理
-
TRUE、FALSEと言う文字で、1、0...
-
VBA split(文字列, ★) ★←複数...
-
perlでのURL判定
-
カートの送料設定を2個まで1個...
おすすめ情報