Perl コーディング初心者質問コーナー Part26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/07/24 19:48ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
あ、ホントだ。
多分、perl5からだと思う。
でも折角のstrict 'refs'なのに…変な仕様だね。
0512nobodyさん
03/08/06 11:45ID:JjxVikEHフォームから取り入れた情報にファイルを書き換えるコードを書いたんです。
そしたらその書き換えるファイルを開こうとしてもそのOPEN行でエラーが起こってしまうんです
どうしたらいいのでしょうか
open(FILE,"+<$fileini");
ご要望ならソースコードの一部または全部を載せますが・・・。
誰か教えてください。
0513nobodyさん
03/08/06 12:55ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0514nobodyさん
03/08/06 13:11ID:???だってさ。
しかも、「ご要望なら」ソースを見せますが。だってさ。
誰の要望だよ。
ちなみにそのopenは書式ミスしてないよ。
0515nobodyさん
03/08/06 13:13ID:???Perlは変数の大きさを勝手に制限するような事はしないから、
Perlの設定や、鯖の設定(もしかしてこれは資源の制限値?)には関係なく、
Perlが取れる最大のメモリが影響する。
>>498
CGIとして動かすなら、ブラウザのタイムアウトでプロセスが殺されるという限界になるはず。
0516nobodyさん
03/08/06 13:15ID:???0517nobodyさん
03/08/06 13:19ID:???0518nobodyさん
03/08/06 13:40ID:???「CGI signal タイムアウト」でググってみ。
書籍があるならsignalの章を見てもいいぞ。
て、ここperlコーディングスレじゃん....
0519512
03/08/06 14:37ID:JjxVikEHHPの諸設定の書き換えがしたくてCGIをコーディングしたんですが
フォームで設定ファイルを書き換える段階まで来て、
このOPEN行で
Unterminated <> operator at administrator.cgi line 194.
ってでるんです。194行目は open(FILE,"+<$fileini"); です。
0520あぼーん
NGNG0522519
03/08/06 15:03ID:JjxVikEHそれでいけるんですか!?
0523519
03/08/06 15:06ID:JjxVikEHScalar found where operator expected at administrator.cgi line 194, at end of li
ne
syntax error at administrator.cgi line 194, near "open(FILE,"$fileini"
String found where operator expected at administrator.cgi line 201, near "print
FILE ""
(Might be a runaway multi-line "" string starting on line 194)
(Missing semicolon on previous line?)
Backslash found where operator expected at administrator.cgi line 201, near "pri
nt FILE "\"
(Do you need to predeclare print?)
syntax error at administrator.cgi line 227, near "}"
administrator.cgi had compilation errors.
0524nobodyさん
03/08/06 15:08ID:???local(*stab) = *{"${package}::"}; # シンボリックリファレンス
local(*stab) = "*${package}::"; # シンボリックリファレンスではない
$pkg = 'ABC';
print "*${pkg}::"; # *ABC::と表示
print eval("*${pkg}::"); # *main::ABC::と表示、何でこうなるかは不明
0525336
03/08/06 15:11ID:???とりあえず削除してみてどうなるのか確認したかった。
どっか前の行で"を付け忘れたりとかそんなミスじゃないの。
0528519
03/08/06 16:00ID:JjxVikEH一応一通り見てみたんですけど、おかしいとこはなかったんです。
sub formset {
# フォームデータ取得
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
$query="$ENV{'QUERY_STRING'};
}
# フォームデータ復元
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);
# 文字のデコード
$value =~ tr/+/ /;
$value =~ s/%[0-9a-fA-F][0-9a-fA-F]/chr(hex($1))/eg;
$foem{$key} = $value;
}
# ファイル出力
open(FILE,"+<$fileini");
seek(FILE,0,0);
foreach $key (sort keys %form) {
print FILE "\$$key=\"$form{$key}\"\;\n";
}
# ファイルを閉じる
close(FILE);
}
これがこのコードの入ったサブルーチンです。
このルーチンを抜いてチェックしてみたらsyntax OKでした。
0529519
03/08/06 16:01ID:JjxVikEH0530nobodyさん
03/08/06 16:04ID:???0532あぼーん
NGNG0533519
03/08/06 16:20ID:JjxVikEH今の今までまったく気がつきませんでした。
syntax OK出ました!!
ありがとうございました!
0534nobodyさん
03/08/06 17:11ID:???0535nobodyさん
03/08/06 17:51ID:???0536nobodyさん
03/08/06 18:27ID:???0537nobodyさん
03/08/06 18:34ID:???$query="$ENV{'QUERY_STRING'};
.....次の " を探し中....
open(FILE,"+<$fileini");
ビクッ. ∧ ∧ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Σ(゚Д゚;≡;゚д゚) < うおっ、 " がでてきたが、なんかすげえ所に迷い込んじまったぞ、ゴルァ!
./ つ つ \______________________
〜(_⌒ヽ ドキドキ
)ノ `Jззз
0538nobodyさん
03/08/06 18:40ID:???悪いが、この程度も自力解決できないようだと、プログラミングは難しい。
試しに聞いてみるが、この程度のエラーが出る度に2chで何日もかけて尋ねるのか?
0539nobodyさん
03/08/06 18:43ID:???>>528みたいに、前の"の対応ができてない。
EOFにエラー出る場合は、大体括弧の対応がおかしい。
このくらいは覚えれ
0540nobodyさん
03/08/06 18:48ID:???そういう奴が以前いたな。
0541nobodyさん
03/08/06 18:50ID:???で動きません。どうしてですか?
0542nobodyさん
03/08/06 18:58ID:???>>1
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
0543nobodyさん
03/08/06 18:59ID:???Syntax errorがでました。
0544nobodyさん
03/08/06 19:07ID:???0546nobodyさん
03/08/06 20:05ID:???0548nobodyさん
03/08/06 20:59ID:???それと、
if(!iguzisuto "data.txtx"){処理;}
が動きません。
どうしてでしょうか。イグジストであってるはずなんですが・・・
0549nobodyさん
03/08/06 21:04ID:???o . 。 . . , . , o 。゚. ,゚ 。 + 。 。,゚.。
゚ , , 。 . + ゚ 。 。゚ . ゚。, ☆ * 。゚. o.゚ 。 . 。
。 . .。 o .. 。 ゚ ゚ , 。. o 。* 。 . o. 。 . .
。 . 。 . .゚o 。 *. 。 .. ☆ . +. . .
。 . . . . . 。 ゚。, ☆ ゚. + 。 ゚ ,。 . 。 , .。
゚ 。 ゚ . +。 ゚ * 。. , 。゚ +. 。*。 ゚. . . . .
。 . . 。 。゚. 。* 。, ´。. ☆。。. ゚。+ 。 .。 . 。 .
. 。 ゚ ゚。 。, .。o ☆ + ,゚。 *。. 。 。 . 。 .
゚ .゚ ゚ 。゚ + 。. +。 * 。゚。゚., ,+ 。゚. 。 . . , , .
゚。゚+゚`, o。。.゚*。゚ 。.゚ 。 ☆+。。゚. ° 。 . , ゚ ゚
。, .゚。 + ☆。,゚. o。 。+ 。゚., . ゚ , 。 。 . .
゚. o * 。゚。゚.。゚。+゚ 。 。 ゚。 ゚ 。 ゚
゚` .゚ .゚. ゚. . ゚ . ゚ . , . . . 。 ゚ .
. . . , 。 . . , .
。 ゚ . 。
, . . , . .
夏だね
。 V ∧∧ ∧∧ <うん。夏だ
( :;;;;;:::) ( :;;;;: )
. . /:;;;;;: | | :;;;:ヽ
〜(::;;;;;;:/. |:;;;;;;: )
‐''"´'''"""''"`''""`"""''''''"´'''"""''"`''""""'''"''''''"`"""''''``'‐
0550nobodyさん
03/08/06 21:05ID:???0551nobodyさん
03/08/06 21:24ID:???0552nobodyさん
03/08/06 21:27ID:ihwsdtLYはvalueを削除するがエントリーは残る、よって
$hash{'name'} = '';
と同じ。
undef $hash{'name'};
は未定義だからエントリーそのものがなくなる。
であってますか?
0553nobodyさん
03/08/06 21:54ID:???0557nobodyさん
03/08/06 22:20ID:???0559nobodyさん
03/08/07 07:46ID:???マニュアル *読めば* 理解できる事だが…
0560nobodyさん
03/08/07 10:17ID:MNjVgF7U$aの属性
$a = 100
$a1 = 200
$a2 = 300
$b
があるとする。このとき、$aの属性と$aの属性がぶつかったときは
なんともにないけど、$aの属性と$bの属性がぶつかったときは
条件が加えるようにしたい
それで
$aのときは条件をつけようと思ったんですけど、属性$aの定数が変数なので
条件がうまくつけられない
よい方法はないだろうか?
if = $a
だと下の2つが含まれなくなる。初心者だけど、わかりますか?
属性というのがわからない。
0563nobodyさん
03/08/07 10:29ID:MNjVgF7U属性というのは火属性は$aとする
$a1や$a2もダメージが違うだけで、火属性としたい。
$bや$cの属性も作りたいけど、ダメージ違いのものもたくさん作る。
このとき火属性と水属性がぶつかったら命中力がおちるとか
条件をつけたい
その属性を特定づける、うまい書き方ってありますか?
ダメージは相手の防御でランだムに減るので、数字は変数なので
固定させることはできないです。
0564nobodyさん
03/08/07 10:31ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
『どういう入力に対してどういう出力が出るのか書け』
0565nobodyさん
03/08/07 10:36ID:MNjVgF7U0566nobodyさん
03/08/07 10:41ID:MNjVgF7U$aは火
$a = 100
$a1 = 200
$a2 = 300
属性は水
$b = 100
$b1 = 200
$b2 = 300
if {
$火属製 = 条件
else { 水属性の条件
0567nobodyさん
03/08/07 10:44ID:MNjVgF7U$aで加えても$a1 $a2 は火属性の条件がつかないので、困る
0568nobodyさん
03/08/07 10:45ID:MNjVgF7Uとか変数になる
0569nobodyさん
03/08/07 10:48ID:???$magic[$zokusei]['lv1'] = 100;
$magic[$zokusei]['lv2'] = 200;
if($zokusei == "fire"){
if($zokusei == "water"){
水の時の処理;
}elsif($zokusei == "earth"){
土の時の処理;
}
}
俺ならこんな感じかな(手抜きでスマソ
0570569
03/08/07 10:49ID:???0571569
03/08/07 10:56ID:???phpと混ざってるし…
ちゃんと回線切って吊ってきて直してくる…
0572nobodyさん
03/08/07 10:57ID:MNjVgF7U自分のは無駄が多かったみたいです。ありがとうございます。
0574nobodyさん
03/08/07 11:07ID:MNjVgF7Uとりあえずgoogleさんでハッシュに関して調べてみるべし。
多分お前が望んでいる答えがそこにある。
$magic{$zokusei}{LV}
上記は、「魔法」の「属性」が「レベル幾つ」のものであるか、という意味だ。
プレイヤー1の魔法属性(仮に$magic_p1)とプレイヤー2の魔法属性($magic_p2)とする。
で
if($magic_p1 == "fire"){ ### プレイヤー1の属性が火の時
とかでいいんでない?
細かくはリファレンスでも見るよろし。
0576nobodyさん
03/08/07 11:16ID:MNjVgF7Uこれは問題ないですよね?
Perl のゲームに適した文法の辞書サイとを知りませんか?
0578nobodyさん
03/08/07 11:28ID:MNjVgF7Uあと、簡単なことは自分で調べたいんですが、
手元にある入門の本は不十分で、いろいろできないんですよ。
いいサイトしりませんか?
ちなみに、パール、辞書で調べると、パールスクリプトの辞書が
ひっかかって、肝心の言語辞書が全くみつからないです
0580nobodyさん
03/08/07 12:20ID:???属性もそうだが、自分用語を改めないことにはこの先もトラブルが絶えないぞ。
とりあえず先人のまとめてくれたテンプレ>>4-6を参考にすべし。
0581nobodyさん
03/08/07 12:25ID:???「ある1つの魔法に、属性や攻撃力など
複数のパラメータを設定するうまい書き方を教えてくれ」
と解釈して良いか?
↓複数のパラメータを設定する方法
$magic{'メラ'} = ['fire','100'];
$magic{'バキ'} = ['air','500'];
↓各パラメータの参照方法
print "$magic{'メラ'}[0]";
print "$magic{'バキ'}[1]";
0582nobodyさん
03/08/07 13:11ID:???0583nobodyさん
03/08/07 13:23ID:???>>581の例はハッシュの中に無名配列のリファレンスを入れた例かな。
実際はもっと複雑になると思われ。
0584nobodyさん
03/08/07 13:28ID:???ご回答よろしくお願いします。
0585nobodyさん
03/08/07 13:44ID:fxtSTKINopen IN,"file/name/to/convert";
open OUT,">file/name/to/convert.tmp";
while(<FILE>){
s/あいうえお/かきくけこ/g;
print OUT;
}
rename "file/name/to/convert.tmp","file/name/to/convert";
0586nobodyさん
03/08/07 13:57ID:2CZr0oIDopen($fh, "-|");
が開けなくて困っています。
Windows版のperlは-|は対応していないのですか?
素敵な対応方法を教えてください。
0588nobodyさん
03/08/07 14:35ID:???0590nobodyさん
03/08/07 15:13ID:???0591あぼーん
NGNG0592nobodyさん
03/08/07 16:03ID:MNjVgF7Uパンチの場合は、5回に1回はダメージ低い。
さらに5分の2の確率でミスをする。
というのを、1ターンの各攻撃を下のスクリプトに書いたが動かない
誰かこの初心者を助けてください
0593nobodyさん
03/08/07 16:03ID:MNjVgF7Uプレイヤー2は$play22の攻撃
$play11 = $sentaku1
$play22 = $sentaku1
$kik = 60
$sentaku = {
$play1 = int(rand 2)
if($play1 == 0) {
$kik
}
}
else($play1 == 1) {
$bougyo = int(rand 5)
if($bougyo =< 1){
0;
else($bougyo >= 2) {
1;
}
{
$panti = int(rand 5);
if($panti == 0) {
$panti1 = 10;
else($panti > 0) {
$panti2 = 20;
}
* $bougyo;
}
}
0594nobodyさん
03/08/07 16:32ID:???0595nobodyさん
03/08/07 16:40ID:???ちみ、潔いですね!男らしいですね!
ということで、『今回だけ特別に』解答してさしあげる。
構造化プログラミングが苦手そうなちみは、gotoを使いなさい。
0597nobodyさん
03/08/07 16:56ID:???$temp = A1 ? B :
A2 ? C ;
A3 ? D :
'';
とか、オレならやるかな…
0598nobodyさん
03/08/07 17:20ID:???0599nobodyさん
03/08/07 17:41ID:???0601nobodyさん
03/08/07 18:06ID:fDShQWtW192\.168\.0\.[24-26]
こんなイメージで正規表現使いたいのですが、勿論このままでは
とおりません。
何かいい書き方ありましたら教えてください。
0602nobodyさん
03/08/07 18:07ID:???0603601
03/08/07 18:07ID:???192\.168\.0\.[65-94]
です。
0604あぼーん
NGNG0605nobodyさん
03/08/07 18:11ID:???0608あぼーん
NGNG0609あぼーん
NGNG0610nobodyさん
03/08/07 18:55ID:???$addr="192.168.0.78";
$addr=~/192\.168\.0\.(\d+)/;
if($1>=65&&$1<=94){
■ このスレッドは過去ログ倉庫に格納されています