- ベストアンサー
変数の中の文字列から特定の文字の数を数え
宜しくお願いします。 変数「$koumoku」の中に「1-1」や「1-2-3」といった文字列が格納されているとします。この中のハイフンの数を数えてそれぞれ別の表示をさせたいと思います。 $kosuu=$koumokuの中のハイフンを数える if($kosuu eq 1){(1)を表示} elsif($kosuu eq 2){(2)を表示} elsif($kosuu eq 3){(3)を表示} ~~ この「$koumokuの中のハイフンを数える」と言うのはどのようにしたら良いでしょうか? ちなみに、$koumokuには数字とハイフンしか入りません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
訂正 $kosuu= split(/-/,$koumoku)-1
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
tr が使えます。 $kosuu = $koumoku =~ tr/-/-/; 以下ドキュメントから (perlop) If the "/d" modifier is used, the REPLACEMENTLIST is always interpreted exactly as specified. Otherwise, if the REPLACEMENTLIST is shorter than the SEARCHLIST, the final character is replicated till it is long enough. If the REPLACEMENTLIST is empty, the SEARCHLIST is replicated. This latter is useful for counting characters in a class or for squashing character sequences in a class. Examples: $ARGV[1] =~ tr/A-Z/a-z/; # canonicalize to lower case $cnt = tr/*/*/; # count the stars in $_ $cnt = $sky =~ tr/*/*/; # count the stars in $sky $cnt = tr/0-9//; # count the digits in $_ どのバージョンからだったか覚えていませんが、この目的に使われることが 多いので、最適化されているはずです。
補足
返答ありがとうございます。 今回は先に返答していただいた#1-2さんの回答の方法でやってみます。
- auty
- ベストアンサー率58% (284/486)
確かめていませんが、 $kosuu= split(/-/,$koumoku)
お礼
返答ありがとうございます。 >$kosuu= split(/-/,$koumoku)-1 この方法で、無事出来ました。ありがとうございました。