• ベストアンサー

変数内の特定の文字の数を数えたい

パール初心者です。 基礎的なことは知っています。フリーCGIのある程度の改造は出来ますが、自作は出来ません。 質問は変数の中にある特定の文字の個数をカウントする方法です。 変数 $abc="01_01_01" があるとします。 この変数の_(アンダースコア)の数を数えたいのです。 _の数を数えて2個以上ある場合、別の処理をさせたいと考えています。 パターンマッチ演算子を使えばいいのだと思うのですが、私の知識ではよくわかりませんでした。 初心者にもわかりやすい説明で教えてください。 お願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#文字の出現回数を調べる $abc="01_01_01"; @a=split //,$abc;#バラバラにして foreach $c (@a){ $count{$c}++;#それぞれの文字を数える } print $count{'_'}; #'_'以外の文字を全て消して文字列の長さを数える $abc="01_01_01"; ($wk=$abc)=~s/[^_]+//g; print length($wk);

tm3
質問者

お礼

文字の数を調べるのにも、いろいろな方法がありますね。 勉強になりました。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sion_fs
  • ベストアンサー率36% (152/416)
回答No.1

$count = ($abc =~ tr/_/_/);

tm3
質問者

お礼

ありがとうございました。 問題が解決しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 変数はグローバルなんですか?

    初心者です。 関数sub xxx{  $abc=10; } 関数sub yyy{  $def=$abc } というように、関数xxxで宣言した変数もPerlでは 関数yyy内で参照できるのでしょうか。つまり、同じ ファイルにあれば関数内で宣言してもグローバル 変数として使用されるのでしょうか。 (my変数は除きます)

    • ベストアンサー
    • Perl
  • 環境変数に文字列をセット?必須ヘッダ?

    perlから環境変数にある文字列をセットしてcgiに送信するには、どのようにすればよいのですか? また、perlからcgiにデータを送る際、ヘッダはどのように書けばよいのでしょうか? 例えば、自分は(perl)はPOSTでContent-Typeはtext/plainだということをcgiに伝えるなど…。 また、ヘッダをcgiへ送る際、必須のヘッダは何があるのでしょうか? 初心者なので、くだらない質問ですいません。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現のパターンに変数を指定したい

    perlでパターンマッチを行う際、正規表現で行いますが、パターン文字列内に変数を指定したい場合はどうすればよいのでしょうか? if ($ENV{HTTP_USER_AGENT} =~ /$pattern/) {  : } というようなことをしたいのですが、うまくいきません。 方法はありますでしょうか?

    • ベストアンサー
    • Perl
  • 改造したCGIのいらなくなった変数

    フリーのCGIをDLさせていただいて、サーバーで掲示板などを使っています。 最近少し「どこをどうすればこうなる」というようなことがわかってきて、 改造というかCGIのプログラムを改変するようになりました。 そこででてきたのが、使わなくなった $~~ などの変数に関する疑問です。 使わなくなった変数が出てきた場合、これに付随するプログラムは全て取り除くべきなのでしょうか? 特にこれといって不具合が出てこないのでそのままにはしていますが、 これでよいのか疑問にも思えてきます。 (何も問題ないなら気にすることない!と怒られそうですが・・^^) なにせこのようなことはCGI勉強サイトでも書いてないので、 独学で初心の私にどうぞ回答をお願いします。よろしくお願いします。

    • ベストアンサー
    • CGI
  • $in{'~'}を$~に変換

    CGIを改造中です。 変数の処理なのですが、サブルーチン内で利用するときに「$in{'~'}」と言う形でしか表示してくれません。これを「$~」の形にしたいです。 数が少なければ「$~ = $in{'~'}」を個数書けばいいのでしょうけど、結構数があるので、何か簡単な方法で変換できないかと考えています。 良い方法があれば教えてください。

    • ベストアンサー
    • Perl
  • String型の変数に代入されている2つの文字列を論理演算したいです。

    String型の変数に代入されている2つの文字列を論理演算したいです。 上記の通りなんですけど 例えば String a = "あいうえお"; String b = "aiueo"; このような二つの文字列を論理演算したあと 16進数の文字列としてあらたな変数(String型)に代入したいのですが どのように記述すればよろしいでしょうか? 初心者なものでわかりやすく説明していただけるとありがたいです。

    • ベストアンサー
    • Java
  • Excel(文字列操作)についての質問です。

    今、Excelで、最初の文字とアンダースコアのあとの文字を取り出す方法を考えています。 (例:ABC_DEF_GHI→ADG) しかし、アンダースコアが何個あるかわかりません。 現在、A1セルに、ABC_DEF_GHIと入力されているとき、 =LEFT(A1,1) & MID(A1,FIND("_",A1,1)+1,1) & MID(A1,FIND("_",A1,FIND("_",A1,1)+1)+1,1)・・・・・ と入力すると取得は出来るのですが、アンダースコアの数が変更になると対応できません。 関数、VBAどちらでも結構ですので、よろしくお願いいたします。

  • 初心者です。Perlではどんな時変数宣言は必要ですか?

    Perl初心者です。 マニュアル本を見ると、Perlでは特に変数を宣言しなくても扱えるようになっていますよね。 今まで幾つか自作CGIプログラムを作ってきたのですが、一度も my や localといった変数宣言を使った事がありません。 プログラム自体は正常に稼働しているので今まで全く無視していたのですが、こちらのPerlカテゴリの質問などを参照させていただいていると、皆さん必ず変数を my で宣言してらっしゃいます。 これは行った方がよいものなのですか? 宣言する事のメリット、宣言しない事のリスク、もしくはしたほうが良い場合、しない方が良い場合等を教えてください。とりあえず、サブルーチン内で宣言すると他のサブルーチンでは使えないらしい、という事だけは朧気に… よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perl正規表現s置換演算子の末尾にカンマについて

    お世話になります。 Perl正規表現プログラムで、 s置換演算子の末尾に、 カンマと丸カッコでスカラ変数を囲んで、 存在している箇所 たとえば、 s/あいうえお/($hensu = $&) =~ tr{ABC}{abc}, ($hensu) =~ s{123}{123}, ($hensu) /eg; のような正規表現であれば、 上記のtr置換演算子や、s置換演算子それぞれの末尾に、 「 , ($hensu) 」 として、カンマと丸カッコでスカラ変数を囲んで、 存在している箇所は、 どのような意味があるのでしょうか? 以上になります。 PS: ネット上や正規表現の本などを読んでも、 上記したような、 カンマと丸カッコでスカラ変数を囲んでいる パターンの解説を、 見つけられなかった為、 ご質問させていただきました。 ご存じの方がいらっしゃいましたら、 教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • コントロールパネルを設置し、そこで変数を変更できるようにしたいのですが

    コントロールパネル(ホームページ上)から(エディタで開くことなく)変数を変更できるようにしたいと考えております。どのような方法で実現するのがよいか、教えていただけませんでしょうか。 コントロールパネルから入力されたデータを、FORMでCGIに送信し、変数ごとにそれぞれのファイルに保存しておく方法しか思いつきません。しかし、メインのCGIを実行するときに、それぞれのファイルを開き、保存されているデータを変数に入れていくとなると、(よく分からないのですが)処理速度が落ちたり、エラーが出る確率が高くなるのではないかと心配しております。一般的にはどのような方法で、コントロールパネルを実現しているのでしょうか。 CGI(perl)初心者のため、なにかサンプル等ありましたら、あわせて教えていただけると助かります。恐れ入りますがよろしくお願いいたします。

    • ベストアンサー
    • CGI