質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

2206閲覧

正規表現_perl:修飾子 r

退会済みユーザー

退会済みユーザー

総合スコア0

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/09/22 04:53

編集2016/09/22 04:58

非破壊修飾子 s///r は $_ (または =~ によって置換されることになる 変数) を変更する代わりに、置換の結果を返します:

Perl

1$x = "I like dogs."; 2 $y = $x =~ s/dogs/cats/r; 3 print "$x $y\n"; # prints "I like dogs. I like cats." 4

と説明ありますが実行結果を比較して現象は見てわかりますがどのような処理をしているのかがわかりません。

実行結果

Perl

1◆r あり で実行 2C:\Users\mp\Desktop>perl structure.pl 3I like dogs. I like cats. 4 5◆r なし で実行 6C:\Users\mp\Desktop>perl structure.pl 7I like cats. 1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rを付けないと$xは置換され結果の1(TRUE)が$yにセットされます。もし置換がされない場合は(マッチしない)は$yにはNULL(FALSE)がセットされます。

rをつけた場合$xは置換せずに、された結果を返します、なので$yには結果がセットされます。もし置換がされない場合は、$xがそのままされなかった結果として$yにセットされます。

perl

1($y = $x) =~ s/dogs/cats/; #以前 2$y = $x =~ s/dogs/cats/r; #同じ結果

変更しないのでこんな事が可能です。

perl

1$x = "I like dogs."; 2print "ans:". $x =~ s/dogs/cats/r ."\n"; 3print "$x \n";

投稿2016/09/22 05:21

編集2016/09/22 06:06
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/22 05:51

なるほど。丁寧なご回答ありがとうございます。 元の$xは変更なしで置換結果だけ出力するということですね。助かりました!!
A.Ichi

2016/09/22 05:58

rオプションの正しくは、$xを$yにコピーしてから置換を行うです。
退会済みユーザー

退会済みユーザー

2016/09/22 06:02

補足のご説明をありがとうございます!
退会済みユーザー

退会済みユーザー

2016/09/22 11:17

ありがとうございます。非破壊的修飾子という命名も理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問