トップページphp
1001コメント294KB

Perl コーディング初心者質問コーナー Part26

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/07/24 19:48ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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
0261nobodyさん03/07/30 00:33ID:???
>>260
おまい、どんどん頭よくなっていくなぁ・・。
026223403/07/30 00:33ID:KKMTj9U0
すいません。
初めの一行に「フォームからの文字列(c:\windows\system32)、分解の基準の文字(\)の場合の例」
と、一言かいておければよかったです。
無駄なレスさしてほんとに申し訳ないです。。
0263nobodyさん03/07/30 00:34ID:???
>>256
その台詞で貴様の技能がどの程度かよくわかった。
標準入力からだろうがブラウザからだろうが入力は入力だろうが。応用の利かない阿呆が。
0264nobodyさん03/07/30 00:36ID:???
>>263
はぁ、アフォだ。STDINなんかcgiで使えるわけないだろ、氏ね
026523403/07/30 00:37ID:KKMTj9U0
>>263
え?STDINって、DOS窓じゃなかったんですか?
フォームのデータは、ReadParse使って、変数に格納してる状態なんですけど・・・
026623403/07/30 00:37ID:KKMTj9U0
もしかして、POSTの場合の、フォームの受け取りのことを言っていたんでしょうか?
0267nobodyさん03/07/30 00:38ID:???
264nobodyさんsage03/07/30 00:36 ID:???
>>263
はぁ、アフォだ。STDINなんかcgiで使えるわけないだろ、氏ね
0268nobodyさん03/07/30 00:40ID:???
234 の混乱ぶりが面白いw
026923403/07/30 00:43ID:KKMTj9U0
253の言いたいことがようやくわかりました。
標準入力、GETの場合は?以降を、分割するってことを言っていたんですね。
そういうことではないんです。
フォームから、好きな文字列とキーの文字を送ってもらって、
そのキーで「文字列」を分解するってことです。
GETの場合でいうと、
?moji=c:\windows\system32&key=\
それで、この「\」で「c:\windows\system32」を分解したいんです。
?moji=aiueo,kakikukeko,sasisuseso&key=,
こんなことです。
0270nobodyさん03/07/30 00:46ID:???
>>269
だから応用できるだろって言ってるだろ。
0271nobodyさん03/07/30 00:47ID:???
俺、未だに 234 が何をしたいのか良く解らないんだけど…

> 初めの一行に「フォームからの文字列(c:\windows\system32)、分解の基準の文字(\)の場合の例」

要は、ある文字列を分解の基準の文字で分解してリストにしたいって事?
split でいいんじゃねーの?って思うが、肝心な「期待しているリストにはこう入って欲しい」
みたいなこと書いてねーからさっぱり解らん
0272nobodyさん03/07/30 00:53ID:???
234のしゃべりとスクリプトがそっくりでおもしろい。
027323403/07/30 00:53ID:0qjcwLeT
>>271
そういうことです。
それで、「ある文字列」も、「基準の文字」も、「何分割される」かも、分からない、という状況で、
どういうスクリプトで処理したらいいかといろいろ試行錯誤して、上のスクリプトができました。
それで、このスクリプトは正しいのか?、もっと簡単にできるんではないか?と思いまして、聞いてみました。
0274nobodyさん03/07/30 00:56ID:???
で、@match にはどう入って欲しい訳?
君はその事について未だ何も記述してないね
027523403/07/30 01:00ID:0qjcwLeT
>>274
@match = split(/$kijun/,"$data")って処理されるわけですから、
基準の文字の数+1が必要な値になりますよね?
たとえば、\で切る、データが「a\b」だったら、2個という具合で。

だから、
@match = ();
for($n=1; $n<=$i+1; $n++){
push(@match,"$n");
}
ここで、その数だけ、配列の値を・・・・・・・・・・
あら、もしやこれ不要なんでは・・・
まさか、いらない・・・
あぁ、いらないんだ。。。
そーだったのか、アフォなことをした・・・・
027623403/07/30 01:02ID:0qjcwLeT
あっはっは


$name = 'c:\windows\system32';


@match = split(/\\/,$name);

foreach $col (@match){
print "$col<br>";
}

これでいけたわ
すまんな、
027725403/07/30 01:04ID:???
>>276
それ俺が書いたまんま…
027823403/07/30 01:05ID:0qjcwLeT
いやぁ、@matchってのは、splitで分割する数だけ値をいれてやらないかんと思っとったんよ。
でも、良く考えると、
push(@match,"$n")って、値がはいってるのに、
なんでc:とか変わってるのかと思ったら

あっはっは
0279nobodyさん03/07/30 01:05ID:???
>>277
ご愁傷様……(;´Д`)
028023403/07/30 01:06ID:0qjcwLeT
よーするにだ、
@aaa = split(/$aa/,$bb)
ってすりゃぁ、
勝手に@aaaの値の数が調節されるんだな

あっはっは
すごいな、パールって

あっはっは
028123403/07/30 01:08ID:0qjcwLeT
ほんとにすまんな、みんな
あっはっは

えらい迷惑かけちまってあっはっは

パールってのはすごい言語だ
あっはっは

俺としたことが・・

みんなこれ知っててだまってたんだろ?

まったく、恥かくぜあっはっは
028223403/07/30 01:10ID:0qjcwLeT
しかも>>254のって
foreach (split(/\\/,$name)) {
だったんだな
なんかほかの物に見えたよ。

この時点で答えでてんじゃん
あっはっは
俺ってどんくさいな
0283nobodyさん03/07/30 01:11ID:???
次の方お待たせ。

0284nobodyさん03/07/30 01:11ID:???
アハハ吊られたね。

では次の質問どーぞ!
0285nobodyさん03/07/30 01:16ID:???
>>282
おまい、Cのやりすぎだ。
028623403/07/30 01:19ID:0qjcwLeT
確かにそうかも、
授業でCあるからな・・
0287nobodyさん03/07/30 01:19ID:???
>>286
配列の大きさとか初めに宣言しなくていいのばペールですよ^^;
0288nobodyさん03/07/30 01:26ID:???
すみません、「<>;」ってどういう意味なんですか?
0289nobodyさん03/07/30 01:32ID:???
<ARGV>
0290nobodyさん03/07/30 01:33ID:???
<^ ^;>
0291nobodyさん03/07/30 01:58ID:???
>>290
おぉ、コンパイルとおるぞ。
029221303/07/30 01:59ID:???
>>215 ぐぐったけど敷居が高そう。今後の課題にします。
>>225 <>で入力完了を待ってシグナルを発生させるみたいです。
0293nobodyさん03/07/30 02:14ID:???
>>288
@ARGVがあれば、@ARGVが行入力演算子に割り当てられ、
@ARGVが空ならSTDINが割り当られる。

代入先がないので、読み出して捨ててる。
STDINが割り当てられたのなら、STDINを一行読み飛ばしている。
STDINにターミナルデバイスが割り当てていれば、一行待って、中身を捨てるということに。
(単なる改行待ち)

>>292
キーボードに関してはperldoc -q keyで、faq5辺りに情報が載ってますよ。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_can_I_read_a_single_characte
029429203/07/30 03:18ID:???
>>293 謝謝 ちと勉強してみます
0295nobodyさん03/07/30 03:25ID:JGELpVxk
cgiproxyの動作は
アクセスがあったらその間だけ
proxyサーバとして動作させ、目的のページを吐き出したら
proxyサーバを終了させる。といった感じですか?
それともproxyサーバとcgiproxyは別の原理ですか?
0296nobodyさん03/07/30 03:31ID:chNZYbR6
すいません。
Perlのことで質問したいのですが。
変数名の一部に変数の中の数字を埋め込んで
その変数名を代入したいのですが
どのようにいくのでしょうか?
ちょっと、言葉では分かりにくいので例を挙げると
例えば、$a1 $a2 $a3という変数があって
$bの中に1〜3のいずれかの数字が含まれているとし
この$bの中の数字を変数名として使いたいのです。
これを
$c = '$a' . "$b";
といった感じでやれば$aの方はそのまま文字列として出て
$bの方は変数の中身が展開されて出ると思ってやってみたのですが
エラーが出てしまいます。

どなたかお助けください。
よろしくお願いいたします。
0297あぼーんNGNG
あぼーん
0298nobodyさん03/07/30 03:57ID:???
print ${'a'.$b};
0299nobodyさん03/07/30 06:20ID:???
>>296
ハッシュか配列を使う。
0300nobodyさん03/07/30 10:34ID:???
↑答えもう出てるだろ( ´,_ゝ`)プッ

300 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
0301nobodyさん03/07/30 10:34ID:???
こういう、変数名自体を動的に云々っていう質問よく見かけるけど、
なんでそういう発想になるんかね。
他の言語じゃそういう質問見かけないんだが(ないことはないと思う)。
やっぱソフトリファレンスのせいなんだろうか。
0302nobodyさん03/07/30 11:00ID:???
>>296
> すいません。
> Perlのことで質問したいのですが。
> どのようにいくのでしょうか?
> ちょっと、言葉では分かりにくいので例を挙げると
> どなたかお助けください。
> よろしくお願いいたします。

読みにくくなるだけだから無駄に6行も余計なことを書くな
0303nobodyさん03/07/30 11:03ID:???
>>301
リファレンスとかじゃなく、単に発想がおかしいだけなんじゃない?
0304nobodyさん 03/07/30 11:36ID:???
ソフトリファレンスは悪です・・・

まぁ、ちゃんと変数の整理が出来てないつーのと、変数のスコープを理解してないってことじゃないだろうか・・・
0305nobodyさん03/07/30 11:53ID:???
Perlはその辺を逐一理解してなくても扱える言語だからな。
それはPerlの優秀な点である。
その分ユーザーのレベルが下がるのは仕方がない。
0306nobodyさん03/07/30 12:32ID:???
下手にソフトリファレンスなんてもんがあるせいで、配列やハッシュの有効な使い方を
理解しないまま進んでしまうんじゃないかな。
030729603/07/30 13:22ID:VqnJP0e8
質問にお答えくださってありがとうございます。

print ${'a'.$b};
だとスカラ変数だとうまくいったのですが
配列の変数だとうまくいかないようです。

$sen1[] $sen2[] $sen3[]という変数があって
$randaに1〜3という値が入ていて
print("{${sen$randa}[$i]}");
のように書いたのですが、どうもうまくいかないみたいです。
0308nobodyさん03/07/30 13:43ID:???
>"{${sen$randa}[$i]}"
ヽ(*`Д´)ノ むちゃくちゃやんけー!
0309nobodyさん03/07/30 14:05ID:???
>>304
モジュールまたがってソフトリファレンス使ってるソースを見たことがある。
最初どこから変数が湧いてくるのか理解できなくて気絶するかと思った。
……って、これはマ板ネタか。

>>307
勉強しなおした方が良いと思われる。
031029603/07/30 14:09ID:QHsgEgDp
>>308-309
Perlは今回初めての仕様で、まだ慣れてないんで
お許しください。
外の括弧で囲めば、配列の[]が文字列として認識されずに済むと
聞いてやってみたのですが
もしかして、これはPHPの文法でしょうか?
031129603/07/30 14:10ID:QHsgEgDp
仕様→使用でした
0312あぼーんNGNG
あぼーん
0313nobodyさん03/07/30 15:13ID:???
ほれ、
print ${'sen'.$b}[$i];

あと >>299 >>304 >>306 >>309 を10回ずつ声を出して読んで!!
お帰りはこちら ↓
http://www.google.co.jp/
0314nobodyさん03/07/30 15:17ID:???
>>307
> $sen1[] $sen2[] $sen3[]という変数があって

ってのは@sen1, @sen2, @sen3ってことか?
perlの配列がわかってれば、こんな書き方にはならないと思うのだが。

${'a'.$b}という回答を貰っておいて${sen$randa}[$i]はないだろ……。

print ${'sen' . $randa}[$i];
0315nobodyさん03/07/30 16:38ID:Nvxneeyi
初心者質問失礼致します。

if(!open(FH, ">>file")){ print 'file open error'; }
else{
  flock(FH, 2);
  print FH 'abcde';
  close(FH);
}

このように追記モードの場合、flockは必要になるの
でしょうか。
0316nobodyさん03/07/30 16:50ID:???
うん
0317あぼーんNGNG
あぼーん
0318nobodyさん03/07/30 17:09ID:???
>>315
モードに関係なく必要なときは必要だと思うが。
0319nobodyさん03/07/31 03:15ID:???
>>318
お返事有難うございます。
ロック使うことにしました。
有難うございました。
0320nobodyさん03/07/31 05:53ID:INH5PtXx
readline,<FH>を使ってデータを取り込みたいのですが、
上(最初)から順ではなく、下(最後)から読ませることは出来ませんか?
0321nobodyさん03/07/31 06:32ID:???
>>320
無理ぽ
あとはPerlメモ嫁
0322nobodyさん03/07/31 07:08ID:???
了解 seekで頑張ります
有難うございました。
0323nobodyさん03/07/31 10:39ID:???
unshiftしたらえんちゃうんかと
0324nobodyさん03/07/31 10:44ID:???
>>323βακα..._〆(゚▽゚*)
0325あぼーんNGNG
あぼーん
0326あぼーんNGNG
あぼーん
0327あぼーんNGNG
あぼーん
0328あぼーんNGNG
あぼーん
0329nobodyさん03/07/31 12:08ID:???
use Time::Local;

$t = time;
print "UTC =", timegm( gmtime( $t ) ), "\n";
print "UTC =", timelocal( localtime( $t ) ), "\n";

gmtime とか localtime で返してくる値を time で
返す値の形式に戻すコードってこんなんでいい?

テストしたら一応2つとも同じ値返す様になったけど…。
0330nobodyさん03/07/31 12:56ID:???
希望通り動いてんのならここで聞かなくてもいいでしょ。
誰かのお墨付きが欲しいの?
0331nobodyさん03/07/31 13:18ID:???
いや、ちょっと自信が無かっただけ…。
UTC の解釈もチョット間違ってたし<自分
0332nobodyさん03/07/31 13:32ID:???
戻すと言ってもそれじゃ無意味だしな
0333あぼーんNGNG
あぼーん
0334nobodyさん03/07/31 13:55ID:???
$t = 10.2 - 10.0
のような小数計算で$tに正しく答が代入されないのはなぜですか?
0335nobodyさん03/07/31 14:11ID:???
↑確認の方法どうやってるの?それが、間違ってるような気がするが
0336nobodyさん03/07/31 14:19ID:???
>>334
不動小数点数の精度の問題ですね。
一般に小数の最後の桁は信用できません。
033733603/07/31 14:22ID:???
浮動小数点です。
033833403/07/31 14:29ID:???
>335
代入して、htmlに書き出すだけです。

>336
そうなのですか…
遠回りですが整数でやることにします。ありがとうございました。
0339nobodyさん03/07/31 14:55ID:???
cgi内部で外部cgiファイルを起動する方法を教えてください。

HTMLだと、<img>タグを使ってたのですが、
<img src="./hoge.cgi">

CGIファイルだと、これがうまく起動されないわけです。
print "<img src=\"./hoge.cgi\">";

どうしたら良いでしょうか?ご教授お願いします。
0340nobodyさん03/07/31 15:58ID:???
>>339 さま、>>1 をお読みください
0341nobodyさん03/07/31 16:11ID:???
>>340
当たり前ですがエラーはでません。
起動したいファイルから吐き出しファイルが更新ができないだけなので、
どう質問したらいいでしょうか?よろしくお願いします。

って340じゃ無理か。(w
0342nobodyさん03/07/31 16:20ID:???
>>339
CGIから別のCGIを呼び出して、その出力を利用したいという事か?
お前の質問からそれを読み取るのは著しく困難だし、態度悪いから教えない。
0343nobodyさん03/07/31 16:54ID:???
>>339
バカだね〜
0344nobodyさん03/07/31 17:07ID:???
おちえない
0345nobodyさん03/07/31 17:22ID:???
>>341 さま、>>1を1200回ほどお読みください
0346nobodyさん03/07/31 20:52ID:???
>>339
いやもう見てて哀れだよ。
自分がたたかれてる理由がわからない奴ってのは。
しかしここで教えるとためにならんしなあ。
辛いところだ。
0347nobodyさん03/07/31 21:26ID:???
だいたいそのCGI、直接叩いてちゃんと出力するんかい。
んでエラー吐かんのは当たり前なんかい。
ちゃんと動かんかったらエラー吐くようにしとらんだけやんか。
それがあんたにとって当たり前なら、あんたの書いたコードは書いた通り
正常にうごいとるわけで、プログラムはなんも悪くないとオモーヨ。
はぁ
0348nobodyさん03/07/31 21:31ID:???
おもろい
0349nobodyさん03/07/31 21:44ID:???
自演ウザ。(*^。^*)
0350nobodyさん03/07/31 22:18ID:???
ちょっとした煽りにいちいちキレてるような奴は、真面目に回答してくれた人に対しても
そういう態度を取る可能性があるからね。
思い通りに動作しなかったり、質疑応答が長引いて耐え切れなくなったときに。

お互いがイヤな気持ちにならないためにも、そしてスレのためにもそういうアフォな質問者は
さっくりと無視しましょう。
0351nobodyさん03/07/31 22:31ID:???
if ($a>1)
  if ($a<10)

これを

if ($a>1 && $a<10)

と書くような技法を何ていうんでしたっけ?知ってる人教えてください。
0352あぼーんNGNG
あぼーん
0353あぼーんNGNG
あぼーん
0354nobodyさん03/07/31 22:47ID:???
自演うぜー。まじで。
いやなら無視すりゃいいのに。
0355nobodyさん03/07/31 22:57ID:???
結合演算子を使う技法w
0356nobodyさん03/07/31 23:20ID:???
ていうか名前なんてあるのか
0357nobodyさん03/07/31 23:26ID:???
2行を1行にする技法
0358nobodyさん03/07/31 23:46ID:???
>>354
自演?
心配すな。
おまいも端役のひとりじゃ
0359nobodyさん03/08/01 00:33ID:???
>>354
>>339必死だな。
0360nobodyさん03/08/01 04:02ID:???
>>351
トリビア技法
■ このスレッドは過去ログ倉庫に格納されています