• ベストアンサー

変数の中の文字列から特定の文字の数を数え

宜しくお願いします。 変数「$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には数字とハイフンしか入りません。

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

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.2

訂正 $kosuu= split(/-/,$koumoku)-1

master-3rd
質問者

お礼

返答ありがとうございます。 >$kosuu= split(/-/,$koumoku)-1 この方法で、無事出来ました。ありがとうございました。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

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 $_ どのバージョンからだったか覚えていませんが、この目的に使われることが 多いので、最適化されているはずです。

master-3rd
質問者

補足

返答ありがとうございます。 今回は先に返答していただいた#1-2さんの回答の方法でやってみます。

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

確かめていませんが、 $kosuu= split(/-/,$koumoku)

関連するQ&A