Perlコーディング初心者質問スレ Part 43
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2005/08/12(金) 01:26:47ID:mHnZWvqz【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0814nobodyさん
2005/10/10(月) 13:58:02ID:???0815811
2005/10/10(月) 16:13:54ID:gKZw7BFlなっています。どうしてでしょうか?
お願いします。
0816nobodyさん
2005/10/10(月) 16:18:09ID:???何が欲しいのか分からない状態で使って
結果が正しいのかどうかも分からないって…
それは質問なのか?
0817nobodyさん
NGNG0818nobodyさん
2005/10/10(月) 22:40:59ID:???129 : foreach(keys %an){
130 : $data = sprintf("%08d\t$_",$an{$_});
131 : push(@count,$data);
132 : }
エラー内容は
Modification of a read-only value attempted at test.cgi line 130.
なのですが、このエラーの修正方法が分かりません。
このスレでいいのかちょっと謎ですが宜しくお願いします。
0819nobodyさん
2005/10/10(月) 22:55:19ID:???分からないエラーが出たときには、そのエラーメッセージでぐぐると良いですよ。
$dataが定数になっていたり、その行の変数、どれか tieしてませんか?
0820nobodyさん
2005/10/10(月) 23:44:14ID:j4NUbQ7s学校の宿題なんですが・・・初歩の初歩で質問するのもはずかしー問題かもしれません・・・
Hex number を入力してそのNumberをDecに変換し、さらにoctal number を decimal にするプログラムを作れ。
っていう問題です。
一応自分で書いたのは・・
#!/perl
use warnings;
use strict;
print "Hexadecimal and Octal number converter\n\n Please enter the Hexadecimal number:";
my $hex = <STDIN>;
print $hex,;
とりあえず、Hex→Decの変換をやってみようと思ってここまで書きました。
これだと、例えば、0xFFっていれても255って返ってこずにそのまま、0xFFって出ちゃうんですよね・・・
神様助けて・・・
0821nobodyさん
2005/10/10(月) 23:52:05ID:???つttp://www.site-cooler.com/cgi-bin/kansuu.cgi?lang=perl
0822nobodyさん
2005/10/10(月) 23:52:46ID:???それさ、そこに書いてある部分が問題文、
というか「これを拡張して書け」みたいな感じなんじゃない?
変換しろって言うんだから、変換しなよ。簡単だぞ。
がんばれよ。
0823820
2005/10/11(火) 00:01:28ID:ydWxrZ97んー。。
変換する式みたいなもんがあるんでしょうか?
print 0xFF,;
って書くと勝手にPerlが普通の数字に変換してくれますが、内部でどのように変換してるんでしょか?
なんか、三角形の面積を求める公式みたいな計算式があればできるっぽいんですけど。。
もう一度一から教科書読み直して勉強してみます・・・。
0824nobodyさん
2005/10/11(火) 00:02:58ID:???書いてもらいたいんだろうなぁ。
0826820
2005/10/11(火) 00:22:37ID:m+2zbTP9#!/perl
#ex2.plx
use warnings;
use strict;
print "Hexadecimal and Octal number converter\n\n Please enter the Hexadecimal number:";
my $hex = <STDIN>;
print hex $hex,;
としたら、0xFF→255
となって変換できたんですけど・・こんなエラーが↓
Illegal hexadecimal digit'
' ignored at ex2.plx line7, <STDIN> line 1.
255
このエラーの最後に255って出たんですけど。。このエラーは無視したら怒られますか??
ま、いっか。おし、次はOctal!
0827nobodyさん
2005/10/11(火) 00:28:56ID:???う〜ん。怒られないと思うけど、初歩的な悪い例として取り上げられるかもw
0828nobodyさん
2005/10/11(火) 00:39:23ID:???0829820
2005/10/11(火) 00:44:24ID:m+2zbTP9#!/perl
#ex2.plx
use warnings;
use strict;
print "Hexadecimal and Octal number converter\n\n Please enter the Hexadecimal number:";
my $hex = <STDIN>;
print hex $hex,;
print "\n Please enter the Octal number:";
my $oct = <STDIN>;
print oct #oct,;
って感じに書いたら、、、
Use of uninitialized value in oct at ex2.plx line 10, <STDIN> line 2.
0
ってなって数字が0に!!
うーん。初歩的な悪い例ですか・・・$hex の中になにか良くないものが入ってるっぽいんですね・・・。
しかし、なんでOctalの場合だと0に・・・
もうちょいがむばってみます・・・
0831827
2005/10/11(火) 01:01:39ID:???>>826のソースでエラーがでるのは$hexにchomp関数を使用していないからです。
$hexの中には0xFF\nと入ってます。その\nを取り除くためにchomp関数を使います。
chomp関数とはなんぞや?
ttp://www.site-cooler.com/cgi-bin/kansuu.cgi?lang=perl&method=chomp
>>829についてはEasy mistake
それでは、おやすみなさい。
0832nobodyさん
2005/10/11(火) 01:12:14ID:???0833nobodyさん
2005/10/11(火) 01:12:39ID:???いや、お前よりかはみんな知ってると思うが・・・^^;
0834827
2005/10/11(火) 01:22:05ID:???馬鹿め!>>820宛に書いた文章だぞ。俺だってchompぐらい知ってる。
chomp関数とはなんぞや?(その下の行に簡単にわかるリンク先)
ttp://www.site-cooler.com/cgi-bin/kansuu.cgi?lang=perl&method=chomp
俺ってなんて優しいんだw
0835nobodyさん
2005/10/11(火) 01:26:50ID:???× print oct #oct,;
〇 print oct $oct;
って教えてやれよw
0837nobodyさん
2005/10/11(火) 01:45:08ID:???テキストエディタだったらすぐ気づきそうな。
0838nobodyさん
2005/10/11(火) 02:14:26ID:???0839nobodyさん
2005/10/11(火) 10:24:06ID:4r4FVZwb$kexp= 200;
$pexp= 676;
$bexp= 267;
$kexp= $a;
$pexp= $b;
$bexp= $c;
$a + $b + $c= $d;
print $d;
何がいけないのかな?
0841nobodyさん
2005/10/11(火) 10:33:04ID:4r4FVZwbそれを、cgiとして使うと500になるんです。
数字の200とかは、適当に使ってるやつで、
ただのテストCGIなんだけど、上手く動かないorz
どこを改善すればいいんだ・・・。
0843842
2005/10/11(火) 10:45:14ID:???「=」の左辺に右辺の結果が代入されるんだぞ。
ちょっと勉強しなおして来い。一発で見抜けなかった俺も修行してくるから。
0844nobodyさん
2005/10/11(火) 10:49:14ID:4r4FVZwbじぇんじぇん頭が回ってなかったなw
よ〜し、では修正に逝ってきますw
0845nobodyさん
2005/10/11(火) 10:53:23ID:4r4FVZwb$kexp= 200;
$pexp= 676;
$bexp= 267;
$a= $kexp;
$b= $pexp;
$c= $bexp;
$d= $a + $b + $c;
print $d;
んで、一応上記のとおりに直しました。
その後はどうすればいいんですかね??
まじ、初歩的ですまんorz
0846nobodyさん
2005/10/11(火) 11:03:44ID:iD4ymnU6Image::Magickで画像の出力を試しているのですが、
Firefoxで以下のエラーメッセージが表示され上手くできません。
"画像ファイル "http://test.notw.biz/sample.cgi" は壊れいているため、表示できませんでした。"
シェルから実行したところ上手く画像は出来ているのですが、
ブラウザから動かすとうまく行きません。
http://www.gac.jp/article/index.php?stats=question&category=12&id=15812&command=msg
も参考にしましたが駄目でした。
use Image::Magick;
my $img_bg = new Image::Magick;
$img_bg->Set(size=>"90x9");
$img_bg->ReadImage("xc:pink");
print ("Content-type: image/png \n\n");
binmode STDOUT;
$img_bg->Write("png:-");
print "\n";
解決方法は何かないでしょうか?
>> $img_bg->Write("png:-");
を強制的にフラッシュ出来れば何とかなりそうな気はするのですが。。。
0847nobodyさん
2005/10/11(火) 11:24:44ID:???0848nobodyさん
2005/10/11(火) 11:26:44ID:???>原因が分からないのですが何かの切っ掛けでこの部分がたまにエラーを吐いてきます。
>
>129 : foreach(keys %an){
>130 : $data = sprintf("%08d\t$_",$an{$_});
>131 : push(@count,$data);
>132 : }
"%08d\t$_"は、$_の内容に応じて、展開結果が変わる。
展開結果の中に書式指定文字列としてタブーなものが混じることもあるから、
「たまにエラーを吐く」ということになるのだろう。
$data = sprintf("%08d\t%s", $an{$_}, $_);
のようにすると解決すると思われ。
0849nobodyさん
2005/10/11(火) 11:59:20ID:???0851nobodyさん
2005/10/11(火) 12:26:14ID:4r4FVZwbヘッダーの足し方がいまいち不明で、
どこら辺に足せばいいのかがわからなくて、
ただいま格闘しておりました・・・。
ですが、ヘッダーがどんな物かはわかるんだけど、
やはり場所が不明で500になってしまいます。
0852nobodyさん
2005/10/11(火) 12:30:16ID:8zYGlOye質問があります。
foreach(sort @data){
としたいのですが@dataの中身はカンマ区切りで2番目と3番目のキー
でソートしたいのですが方法はありますでしょうか?
0854nobodyさん
2005/10/11(火) 12:34:55ID:???わかってないことをわかったように言うな。
#!/usr/bin/perl
print "content-type:text/plain\n\n";
$kexp= 200;
$pexp= 676;
$bexp= 267;
$a= $kexp;
$b= $pexp;
$c= $bexp;
$d= $a + $b + $c;
print $d;
これで動かなきゃあとは一行目だ。
0855nobodyさん
2005/10/11(火) 13:18:47ID:???0856nobodyさん
2005/10/11(火) 13:28:06ID:???0857846
2005/10/11(火) 15:16:03ID:???print を抜いても
IE、Operaで試してみても駄目でした。
色々調べているのですが
どうにも手に負えそうにないので別な方法を考えようと思います。
ありがとうございました。
0859nobodyさん
2005/10/11(火) 15:40:53ID:XkXcz5GJ$1と書かなければならないところで\1と書くとうまく動作しませんが、
\1をすべて$1と書きかえて問題が生じることはありますか?
0861796
2005/10/11(火) 19:28:50ID:???私のやりたかったことは、
if($form{read/([0-9a-zA-Z]+)/]}){ print $1; }
このような判定がかけられればと質問させていただいた次第です。
説明不足ですみませんでした。
順次試させていただきます。
有難うございました。
0863nobodyさん
2005/10/11(火) 21:18:28ID:???お前がそう書いたらどういう風に動くことを期待しているのか
説明してくれないと結局何がなんだかわからないわけだが。
0864820
2005/10/11(火) 21:49:41ID:???一応できたの載せときます。
#!/perl
#ex2.plx
use warnings;
use strict;
print "Hexadecimal and Octal number converter\n\n Please enter the Hexadecimal number:";
my $hex = <STDIN>;
chomp($hex);
print hex $hex,;
print "\n Please enter the Octal number:";
my $oct = <STDIN>;
print oct $oct,;
一番まいったのが$と#の違いに気づくのに1時間近くかかったことでしょうか・・・
いや〜Perlって奥が深い
0866820
2005/10/11(火) 21:55:29ID:m+2zbTP9Decimalを256以下の数字で聞いてきて、それをBinaryにコンバートするプログラムをつくっれ
っていうものなんですが・・・ヒントがあって、(bitwise operator 8回使用)
っていう問題なんです。
これって、IF使わないとだめなんでしょうか?それともIF使わないでもできるっぽいです?
まだIF習ってないのでもしかしてこれは誤問題じゃないか!?
って疑惑があがって来てるんですけど。。
できるんですか?教えて神様
0868796
2005/10/11(火) 21:58:13ID:???すみません。
existsってありますよね。
これの正規表現版のようなことをしたかった次第でございます。
そして可能であれば存在するキーの一部を後方参照できれば、と
先ほどの書き込みをさせていただきました。
0870nobodyさん
2005/10/11(火) 22:15:43ID:???0873796
2005/10/11(火) 22:41:01ID:???おっしゃるとおりです。
可能であれば、+後方参照もということでした。
>>870
帰宅後やってみたいと思います。
色々とご返答有難うございました。
0874nobodyさん
2005/10/11(火) 23:03:18ID:C7OEkxia$hoge2 = "運転";
if($hoge =~ /$hoge2/){
print "ok";
}
マッチしないんですけど、なぜでしょうか。。
0876nobodyさん
2005/10/11(火) 23:08:27ID:???激しくありがとう!
0877nobodyさん
2005/10/11(火) 23:25:44ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#errors
の、「マッチするはずなのにマッチしない (1)」
0879nobodyさん
2005/10/11(火) 23:33:36ID:???今後のためにもいいんじゃないのか
0880nobodyさん
2005/10/11(火) 23:39:41ID:???今後は結局本人次第かと。
0881820
2005/10/12(水) 00:22:26ID:???#!/perl
print "Please enther the decimal number which is between 0 and 255\n";
my $input = <STDIN>;
if ($input >= 127) {print "1";
$input = $input - 126;
}else{print"0";}
if ($input >=64){print"1";
$input = $input - 64;
}else{print"0"; }
if ($input >=32){print"1";
$input = $input -32;
}else{print"0"; }
if ($input >=16){print"1";
$input = $input -16;
}else{ print"0"; }
if ($input >=8){print"1";
$input =$input -8;
}else{print"0"; }
if ($input >=4){print"1";
$input = $input -4;
}else{print"0"; }
if ($input >=2){print"1";
$input =$input - 2;
}else{print"0"; }
if ($input >=1){print"1";
$input =$input -1;
}else{print"0"; }
IF使う方法しかどうしても解りませんでした・・・なにはともあれ御指導ありがとうござました。
0882nobodyさん
2005/10/12(水) 00:23:12ID:???0883nobodyさん
2005/10/12(水) 00:28:47ID:???0885nobodyさん
2005/10/12(水) 00:41:00ID:???0891871
2005/10/12(水) 02:14:08ID:???ちょwwwおまwwwwwビット演算子使えって言われてるのに
どうしてそういう答えになるんだよw ビットシフト使うんだよw
おまい授業ちゃんと聞いてないだろ。ちょと必死に基礎から勉強しなおせ
0892nobodyさん
2005/10/12(水) 02:36:00ID:???変わってる気がするのは俺だけか。
まあ hex や oct も習ってるしその延長かなあ。
perl なんだから、もっと目的があって作ってて楽しいことから教えればいいのに、って思っちゃう。
0894nobodyさん
2005/10/12(水) 05:26:24ID:???つかif文使うにしても>>881はあんまりだろw
0895nobodyさん
2005/10/12(水) 11:38:44ID:???my $input = <STDIN>;
printf ("\nbinary = %b", $input);
0896nobodyさん
2005/10/12(水) 12:02:57ID:fQz+s6Mxたとえば@dataの中にあいえおかきけこさしすせそ
が入ってるとします。「け」の文字だけ抜き出して$keにいれる
のはどうしたいいですか?順番が変わらないで$data[6]と添え字にすればいいかも
しれませんが、「け」の位置がいつもそことは決まってないんです。
先頭に来る場合もあれば、2番目にくる場合もあるんですね。
こういう場合、配列から取り出したい文字列を抜き出すのはどうやったら
いいのでしょうか?
ご教授お願いいたします。
0898nobodyさん
2005/10/12(水) 13:32:50ID:???取り出す必要はないよなw
0900nobodyさん
2005/10/12(水) 16:08:46ID:???>宿題は昔から自分でやれという決まりですよね。。。
本来はそうなのだが、今回は特別だ。
教官が感激してくれるようなものを作ってやったぞ。
print "input number: ";
my $input = <STDIN>;
printf ("\n【照合用】 %08b", $input);
print "\nmybinary = ".binconv(0x80, $input);
sub binconv{
my ($binseed, $input) = @_;
return ($binseed ||"") && (($input & $binseed) && 1).binconv($binseed >> 1, $input);
}
0901nobodyさん
2005/10/12(水) 16:19:17ID:???print "input number: ";
my $input = <STDIN>;
printf ("\n【照合用】 %08b", $input);
これだけでもいいかと思うんですが…
>>820の教官の問題にも問題があると思ってるのは漏れだけですか?
0902nobodyさん
2005/10/12(水) 18:37:38ID:???>>900 の回答は、>>866 の宿題に対するものだけど、
「ビット演算子を8回使う」という条件があるみたいだから、
printfの出力はあくまでも参考のみ。
0903901
2005/10/12(水) 18:55:56ID:???>>900先生のコードはすばらしいと思うのですが…
なんでこんな問題を…と少し思ったしだいです。
>>820がどんな教科書で勉強してるのかも興味ありです。
0904nobodyさん
2005/10/12(水) 19:14:52ID:???入れられてしまうので、その後に入れた順番でソートをかける
ことは不可能という認識で間違いございませんでしょうか。
0905nobodyさん
2005/10/12(水) 19:50:30ID:???ハッシュを eash/keys/values/配列コンテキスト等で読み出した
際の順序は、人間にとっては一見ランダムだが、perl 自身に
とってはランダムではないし、何回呼んでも必ず同じ順序になる。
入れた順序に関係なく、目的の値を分かり易い名前で素早く取り
出せるように作られているのが今の perl の実装なので、入れた
順序が重要なら、それに適したデータ構造 -- 配列を利用するか、
Tie::IxHash のようなラッパーを使う。
0906820
2005/10/12(水) 22:09:26ID:???すごいプログラムありがとうございます。
ですが宿題はすでに提出してしまいました。。
なので今後の参考にさせていただきます
>>903
使ってる教科書は学校でSubject毎に買わされる・・・なんていうんでしょう・・・。
70ページくらいのノートブック?っといったほうがいいかもしれません。
学校はオーストラリアのCollegeで日本で言う職業訓練校を低レベルにしたみたいなとこでしょうか・・・。
今回のSubjectの題名がNetwork Application Solution でこの教科書の2/3程がPerlについて、
残りがVBのDebuggingについてとか、あとはJAVAはなんだ、ActiveXはなんだProxyServerがどうとか
いう説明がちょちょってあるほんとにみすぼらしい構成になっております。
ちなみにこの教科書にはIFとかの説明は載ってません。
さらに今回のSubjectはALL Selfstudyなので先生はまったくと言ってイイほどなにも教えてくれません。
ここに書いた二つの問題はこのエセ教科書の”Acitivy"からの問題です。
以上の理由により、多少奇抜な内容になっています。>>903 さんが興味をもったのもうなずけます・・・。
なにはともあれPerlのセクションの宿題は今回ので無事全部終わりました。
レスくれた皆様ありがとです!
0907nobodyさん
2005/10/12(水) 22:12:57ID:???0908nobodyさん
2005/10/12(水) 22:19:58ID:???0909nobodyさん
2005/10/13(木) 00:17:06ID:???ご教示いただけますと幸いです。
0912909
2005/10/13(木) 00:33:27ID:???やりたいことは、QUERY_STRINGの判定に
(\W|)c=3
このようなイメージの指定をしたいのですが、ようは英数字以外が
cの前にきた場合と「?c=3」と前に何もない場合を指定したいという
ことです。
説明下手ですみません。
レス数が900を超えています。1000を超えると表示できなくなるよ。