• ベストアンサー

エラーがでてしまうのですが・・・

文章比較がうく動かないんです。比較したい文字は小文字の欧文です。 $hakoにはアルファベットが入り、eq演算子で文字比較しています。 プログラムは下のような感じです。どうもo(オ-)あたりでエラーが出るんですが、どうして出るのかわかりません。 教えて頂きたいです。 また、ほかにもっと良い方法がある方は教えていただきたいです。環境はPerl 5.005_03でJPerlを使用してます。 if($hako eq a){$piti += 5;}      elsif($hako eq b){$piti += 6;}      elsif($hako eq c){$piti += 5;}      elsif($hako eq d){ $piti += 6;}      elsif($hako eq e){ $piti += 5;}      elsif($hako eq f){ $piti += 4;}      elsif($hako eq g){ $piti += 6;}      elsif($hako eq h){ $piti += 6;}      elsif($hako eq i){ $piti += 3;}      elsif($hako eq j){ $piti += 3;}      elsif($hako eq k){ $piti += 6;}      elsif($hako eq l){ $piti += 3;}      elsif($hako eq m){ $piti += 9;}      elsif($hako eq n){ $piti += 6;}      elsif($hako eq o){ $piti += 6;}      elsif($hako eq p){ $piti += 6;}      elsif($hako eq q){ $piti += 6;}      elsif($hako eq r){ $piti += 4;}      elsif($hako eq s){ $piti += 5;}      elsif($hako eq t){ $piti += 4;}      elsif($hako eq u){ $piti += 6;}      elsif($hako eq v){ $piti += 6;}      elsif($hako eq w){ $piti += 9;}      elsif($hako eq x){ $piti += 6;}      elsif($hako eq y){ $piti += 6;}      elsif($hako eq z){ $piti += 5;}

  • Perl
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
回答No.3

文字列をシングルクオートで括り忘れてますね(^^ それが原因です。 * * * if($hako eq 'a'){$piti += 5;} elsif($hako eq 'b'){$piti += 6;} elsif($hako eq 'c'){$piti += 5;} elsif($hako eq 'd'){ $piti += 6;} elsif($hako eq 'e'){ $piti += 5;} elsif($hako eq 'f'){ $piti += 4;} elsif($hako eq 'g'){ $piti += 6;} elsif($hako eq 'h'){ $piti += 6;} elsif($hako eq 'i'){ $piti += 3;} elsif($hako eq 'j'){ $piti += 3;} elsif($hako eq 'k'){ $piti += 6;} elsif($hako eq 'l'){ $piti += 3;} elsif($hako eq 'm'){ $piti += 9;} elsif($hako eq 'n'){ $piti += 6;} elsif($hako eq 'o'){ $piti += 6;} elsif($hako eq 'p'){ $piti += 6;} elsif($hako eq 'q'){ $piti += 6;} elsif($hako eq 'r'){ $piti += 4;} elsif($hako eq 's'){ $piti += 5;} elsif($hako eq 't'){ $piti += 4;} elsif($hako eq 'u'){ $piti += 6;} elsif($hako eq 'v'){ $piti += 6;} elsif($hako eq 'w'){ $piti += 9;} elsif($hako eq 'x'){ $piti += 6;} elsif($hako eq 'y'){ $piti += 6;} elsif($hako eq 'z'){ $piti += 5;}

Chiaki---
質問者

お礼

ありがとうございます。早速ためした所、できました! 助かりました。

その他の回答 (2)

  • ganzou
  • ベストアンサー率29% (25/85)
回答No.2

もしかして、aからzって文字定数のつもりでつかってんのか? 全部 "a" "b" "c" とするべきだな。

  • ganzou
  • ベストアンサー率29% (25/85)
回答No.1

エラーって何の? このコードではなくほかの部分にエラーがないという保証はあるの?

Chiaki---
質問者

補足

エラーはsyntax error at t.pl line 139,near "}" Execution of t.pl aborted due to compilation errors と表示されます。 139行目がちょうどelsif($hako eq o){ $piti += 6;}なんです・・ この他にエラーはないです。この部分の文章を抜くと普通にプログラムが動きます。言葉足らずですいません

関連するQ&A

  • 文字列比較の演算子

    Perl の世界から PHP にやってまいりました。 Perl では、文字列の比較には専用の演算子がありまして、 str1 eq str2 とすると、二つの文字列が同値かどうか調べられますが、PHP にはこのような演算子はないのでしょうか? www.php.net のマニュアルを見ても、そのような演算子がありません。 == 演算子が使えるものかと <?php $str1 = "this is string" ; $str2 = "this is string" if( $str1 == $str2 ) { echo "two string is same" ; } ?> などを試してみるとうまくいくようですが、www.php.net のマニュアルには「文字列を数値化して比較する」と書いてあり、本当に文字列比較が出来るか確信がもてず…。 結局、文字列を比較したいときには strcmp を呼び出していますが、これは PHP 的には正しいのでしょうか?

    • ベストアンサー
    • PHP
  • ZF公理系に「積集合の公理」がないのは何故ですか?

    (I)外延公理   ∀z(z∈x <-> z∈y)-> x=y (II)対公理    ∃z∀u(u∈z <-> u=x ∨u=y) (III)和集合公理  ∃y∀z(z∈y <-> ∃u(u∈x∧z∈u)) (IV)ベキ集合公理 ∃y∀z(z∈y <-> z⊆x) (V)空集合公理  ∃x∀y¬(y∈x) (VI)無限公理   ∃x(Φ∈z∧∀y(y∈x ー> y∪{y}∈x)) (VII)置換公理   ∀x∀y∀z(φ(x,y)∧φ(x,z)->y=z) -> ∃v∀y(y∈v <-> ∃x(x∈u∧φ(x,y))) (VIII)正則性公理  x≠Φ ー> ∃y(y∈x ∧ y∩x=Φ) このように和集合の公理はあるのに何故積集合の公理はないのでしょうか? 他から導けるのでしょうか?

  • ポテンシャルと保存力

    問題は、ポテンシャルがU=1/rのときの保存力を求めよ。答えはr(スカラー)とr(ベクトル)を使って表せ。ただし、r(スカラー)=(x^2+y^2+z^2)^1/2 という問題です。私は以下のように解きました。 F=(∂U/∂x)+(∂U/∂y)+(∂U/∂z) =-1/2(x^2+y^2+z^2)^(-3/2)・2x-1/2(x^2+y^2+z^2)^(-3/2)・2y-1/2(x^2+y^2+z^2)^(-3/2)・2z =-(x^2+y^2+z^2)^(-3/2)(x+y+z) =-(x+y+z)/r^3 とここまで解けたのですが、x+y+zをrで表せません。どうするのでしょうか?どなたか分かる方教えて下さい。

  • キーボードがめちゃくちゃです

    今パソコンで文字入力をしようとしたらアルファベットの Oが6とかUが4とかめちゃくちゃ変換されてしまいます。 何かを解除したら直ると聞いたのですが自分でも何を いじってしまったのかわかりません。 どなたか対処方を教えていただけないでしょうか?

  • 対称性を利用した問題

    対称性を利用した問題 x,y,z<0 でx+y+z<-3 およびx^2+y^2+z^2+2xyz=1を満たす時 (x+1)(y+1)(z+1)≦0 であることを示せ。 解答ではx+1=a, y+1=b, z+1=cと置き替えて解いています。 しかし私はこの置き換えに気付かなかったので、この置き換えをせずに何とか解けないかと考えているのですが、行き詰っています。 どなたか分かる方、教えて頂けないでしょうか? よろしくお願いします。 以下私の途中までの方法です。 x+y+z=s , xy+yz+zx=t, xyz=u とすると s<-3 , s^2-2t+2u=1 で、示すべきは、s+t+u+1≦0 tを消去すると、s^2/2+2u+1/2≦0 が示すべき式

  • 順列・数え上げ

    よろしくお願いします。 ここに下のような390個の文字があります。 (A,B,C,D,E,F,G,H,I,J,K,L,M がそれぞれ10個ずつ、 N,O,P,Q,R,S,T,U,V,W,X,Y,Z がそれぞれ20個ずつあります。) この390個の文字から235文字を選んで一列に並べる方法は全部で何通りありますか。 A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z 以下、私が考えたことを書きます。 この390個の文字から235個の文字を選ぶ組み合わせの総数は、 (Σ[k=0~10]x^k)^13*(Σ[k=0~20]x^k)^13 を展開したときのx^235の係数ですから、 23463540513956137996043929988 通りだということは分かります。 この23463540513956137996043929988 通りのそれぞれについて235個の文字 の順列(同種のものを含む順列)を数え上げれば答えは出ると思いますが、これは あまりにも大変な作業です。 何かよい知恵はないでしょうか。

  • NCマクロからのサブプログラム呼び出し

    マクロの勉強中です。 使用機械 森精機 NH5000DCG 制御装置 fanuc30i マクロの実行についての質問ですが、 G65P0000X0Y0・・・・・とサブプログラムの呼び出しで Pで指定したサブプログラムをファイルとして用意しないで メインプログラムに記述して実行するというプログラムを 目にしました。 KST32B-FO-LM という文字刻印マクロプログラムです。 サンプルファイルの記述は以下です。 *********************************************************************** (X:#24:文字の中心のX座標・省略時=現在位置 ) (Y:#25:文字の中心のY座標・省略時=現在位置 ) (R:#18:Z方向 R点・省略不可 ) (Z:#26:Z方向 終点・省略不可 ) (I:#4 :横方向の倍率[全角文字は29mm、半角文字は15mmに対する倍率]・省略時=1.0) (J:#5 :縦方向の倍率[全角半角文字共に31mmに対する倍率]・省略時=1.0 ) (E:#8 :Z方向の切削送り速度・省略時=F/2.0 ) (F:#9 :XY方向の切削送り速度・省略不可 ) O0001 G91G30Z0 T1M6 G54G90G0X0Y0 S1000M3 G43H1Z100.0 Z3.0 G65P1309X0Y0R3.0Z-0.2I0.3J0.3F100 G65P4836X10.0R3.0Z-0.2I0.3J0.3F100 G65P1023X20.0R3.0Z-0.2I0.3J0.3F100 G65P1012X25.0R3.0Z-0.2I0.3J0.3F100 G65P1016X30.0R3.0Z-0.2I0.3J0.3F100 G65P1016X35.0R3.0Z-0.2I0.3J0.3F100 G65P1016X40.0R3.0Z-0.2I0.3J0.3F100 G65P4589X50.0R3.0Z-0.2I0.3J0.3F100 G65P3245X60.0R3.0Z-0.2I0.3J0.3F100 G65P1538X70.0R3.0Z-0.2I0.3J0.3F100 G65P3861X80.0R3.0Z-0.2I0.3J0.3F100 G65P2309X90.0R3.0Z-0.2I0.3J0.3F100 G65P1310X100.0R3.0Z-0.2I0.3J0.3F100 G0Z300.0M5 G91G30Z0 M30 O1012(CD=002C) #1=#4001 #3=#4003 IF[#9EQ#0]GOTO1 IF[#18EQ#0]GOTO1 IF[#26EQ#0]GOTO1 IF[#18LE#26]GOTO1 IF[#4EQ#0]THEN#4=1 IF[#5EQ#0]THEN#5=1 IF[#8EQ#0]THEN#8=#9/2 G90G0X#24Y#25 Z#18 G91X[-1*#4]Y[-8.5*#5] G90G1Z#26F#8 G91X[-1*#4]Y[-2*#5]F#9 X[-1*#4]Y[2*#5] X[1*#4]Y[2*#5] X[2*#4]Y[-2*#5] X[-1*#4]Y[-3*#5] X[-3*#4]Y[-3*#5] G90G0Z#18 G91X[4*#4]Y[14.5*#5] G#1G#3 GOTO2 N1#3000=1 N2M99 *********************************************************************** デモ版lance for windows というシュミレーションソフトで動きを見てみますと動作しています。 実際に加工機にかけてみてみればいいのですが、 その前にどなたかこういったサブプログラムの記述の仕方をお使いになって いらっしゃいましたらアドバイスをお願いいたします。

  • アルファベットの小文字の起源(大文字と形が同じもの/違うもの)

    英語のアルファベットの小文字は、私なりに分類すると 1.大文字と全く同じ形のもの  c o s v w x z 2.大文字にかなり似ているもの  f k p u y 3.大文字を筆記体で書いたものに似ているもの  g 4.大文字と似ていないもの  a b d e h i j l m n q r t です。 小文字の起源をご存じの方いらっしゃいましたら、 なぜ上記のようになっているか教えてください。

  • 微分 やり方を見せてほしいです

    y=-3ln(1-x)^2 を微分せよという問題です。 私のやり方 (1-x)を u とする y=-3lnu^2 u^2 をzとする y=-3lnz dy/dx = (dy/dz)(dz/du)(du/dx) =(-3/z)(2u)(-1) =6/u =6/(1-x) となります。 答えはこれで合っているのですが無駄なやり方をしてる様に思います。 普通はどんなやり方をしているのでしょうか?

  • マクロな話ではなく、エクセルの並び替えで、アルファベットの大文字と小文字の順番を

    マクロな話ではなく、エクセルの並び替えで、アルファベット順にすると、大文字小文字の区別がなく、A→a→B→bというように続きます。それをアルファベットの大文字Zまでいった後に、小文字が続くようにしたいのです。Y→Z→a→b→c・・・のように。 どなたか教えて下さい!!

専門家に質問してみよう