Perl コーディング初心者質問コーナー Part37
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/22 01:41ID:???誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0509500
04/09/16 14:35:39ID:???ただ socket を使った事が無くて検索してみましたけど、意味もあんまり分からなかったです。
どう記述したら良いのでしょうか?
読み込むファイルによって異なる記述になるんでしょうか?
0511nobodyさん
04/09/16 14:52:41ID:???1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0512500
04/09/16 15:15:35ID:???require '../xx/xx.cgi';
でやったらログファイルへのパスが上手くいきませんでした。
xx.cgiの中には
$logfile = "xx.txt";
if(!open (DATA,"$logfile")){&output("error404"); exit;}
と言うのを書いてるので、error404 と出ます。
同じフォルダに持ってくると出来ますが、違うフォルダじゃなければいけないので…。
それで、>>504さんの解答をもらったので socket ではどうやって記述したら良いのかなと。
ディレクト構造は、
+folder1
┣xx.cgi
┗xx.txt
+folder2
┗xx.cgiを呼び出したい.cgiファイル
です。
0513nobodyさん
04/09/16 15:20:35ID:???> 意味もあんまり分からなかったです。
( ´ー`)フゥー...
0514nobodyさん
04/09/16 15:26:55ID:???socketを使うまでもないな。
$logfile = "xx.txt"; → $logfile = "../folder1/xx.txt";
でどうだろう。
0515nobodyさん
04/09/16 15:32:26ID:kf2OMroIこのようにファイルを読み込んで、追加書き込みしているのですが
open(IN, "$outfile");
@data = <IN>;
close(IN);
open(OUT, "> $outfile");
print(OUT "<div>new</div>\n@data");
close(OUT);
こうしてデータを追加していくと$outfileの中が
<div>new</div>
<div>new</div>
<div>new</div>
このようにスペースが入り込んでズレていくんです。
原因わかりますでしょうか。
0518500
04/09/16 16:05:00ID:???表示出来ました(^^;
ありがとうございます。
と言うか思いつかなかった自分が恥ずかしいです…。
>>513
socket ってそんなに使う物なんですか?
socket 使ってる配布CGI一個しか見た事ないんですけど…
敷居が高いとか?
今勉強している本にも無かったです(汗
0519nobodyさん
04/09/16 16:24:21ID:???0521nobodyさん
04/09/16 16:31:30ID:???他のサーバーのページやらcgiの出力結果を取得できるので
単語(含>>519)だけでも覚えておけばいいと思う。
0523nobodyさん
04/09/16 16:58:25ID:TnwBmEsgImage::Magickモジュールを使って画像サイズを変更することは可能でしょうか。
#Image::Magick
use Image::Magick;
$width = 120;
$img = Image::Magick->new;
$img->Read("xxx.cgi");
$img = $img->Transform(geometry => $width);
print "content-type:image/png\n\n";
binmode(STDOUT);
$img->Write("png:-");
Image::Magickがcgiファイルを読み込めないみたいなので
GDモジュールの方でxxx.pngといったような画像ファイル名を
吐き出させる方法がわかりません。
#GD
use GD;
$w = 500;
$h = 500;
$im = new GD::Image($gw,$gh);
(描画処理)
$im->png(-1);
0524その(1)
04/09/17 00:29:48ID:iw09y7mQ#!/usr/local/bin/perl
require "./cgi-lib.pl";
&ReadParse();
$number_2 = $in{'number_1'};
#置き換え開始
$number_2 =~ s/イチ/1/g;
#$number_2 =~ s/ニー/2/g;
$number_2 =~ s/サン/3/g;
$number_2 =~ s/ヨン/4/g;
#$number_2 =~ s/ゴー/5/g;
$number_2 =~ s/ロク/6/g;
$number_2 =~ s/ナナ/7/g;
$number_2 =~ s/ハチ/8/g;
#$number_2 =~ s/キュー/9/g;
#$number_2 =~ s/ゼロ/0/g;
0525その(2)
04/09/17 00:30:12ID:iw09y7mQprint <<"ABCD";
Content-type: text/html
<html>
<body>
$number_2<br>
</body>
</html>
ABCD
これが本文です、number1には「ナナニーサンニーイチキューハチキューゼロ」の
ような文字(htmlのformからとってくる)が入っていて、それを数字に直したいです。
しかし、なぜか2、5、9、0の置き換えをしようとするとエラーになってしまいます。
なぜなのでしょうか
0526nobodyさん
04/09/17 00:33:21ID:???↑ ↑ ↑
0527nobodyさん
04/09/17 00:46:12ID:???'ー' 0x815B
'ゼ' 0x835B
# 0x5B → [
だからコケるのでしょう。
むしろ、「ニー」「ゴー」が関西ローカルなことに注意してください。
0529nobodyさん
04/09/17 01:21:24ID:???どんなCGIを作ろうとしてるのか気になりますなぁ
0530nobodyさん
04/09/17 01:22:14ID:???なら大丈夫。
0531nobodyさん
04/09/17 04:04:27ID:???ならもっといい
0532525
04/09/17 04:26:09ID:iw09y7mQイチ ニー サン ヨン ゴー ロク ナナ ハチ キュー ゼロ
から成る文字列は、自分で作るのではなくコピペしてformにもってくるものなので
できればこのまま使いたいのです。それじゃないと、この変換を頭でやったほうが
速くなってしまう
しかし、”ー”と”ゼ”が入っていては正規表現は使えないってことですよね、
どうしたらいいんだか。。
0533nobodyさん
04/09/17 04:57:01ID:???require 'jcode.pl';
$number_2 = $in{'number_1'};
&jcode::convert("*number_2", "euc");
この上と下の2行を加えればよい。jcode.plでググルこと。
0534nobodyさん
04/09/17 05:04:55ID:???0535534
04/09/17 05:05:45ID:???0536nobodyさん
04/09/17 06:10:09ID:???0537nobodyさん
04/09/17 08:38:01ID:???0538nobodyさん
04/09/17 12:32:25ID:fDDxvp6Zすいません、上の配列をフォームで送った時にEUCに書き換えようと
した場合、&jcode'convert(*ura,'euc');でやると文字化けします。
どの部分を指定してやればよいのですか?
0539nobodyさん
04/09/17 12:37:40ID:???0540nobodyさん
04/09/17 13:36:28ID:442/c2rwuse strict;していると、Fcntlの定数O_RDONRYなどに
引っかかりエラーが出てしまうんですが、これってしょうがないんでしょうか?
use strict 'vars';
だと大丈夫なのですが・・・。
すんません、おながいします。
Software error--------------------------------------
Bareword "O_RDONRY" not allowed while "strict subs"
----------------------------------------------------
tie(my %h, 'SDBM_File', $dbm_name, O_RDONRY, 0600);
ここの、O_RDONRYの部分です。
0541nobodyさん
04/09/17 14:03:17ID:???jcode::convert(\$_, 'euc')
for @answer{qw(team2 1u 2u 3u 4u 5u 6u 7u 8u 9u totalu)};
>>540
s/O_RDONRY/O_RDONLY/g;
0544543
04/09/17 14:24:49ID:???0545540
04/09/17 15:10:51ID:???ほんとすんません・・・。
O_RDWRだと大丈夫なのにどうして!?
とかしばらく、strictとFcntlについて調べてました・・。
0546nobodyさん
04/09/17 15:47:49ID:???0547538
04/09/17 16:06:15ID:fDDxvp6Zありがとうございました。無事解決しました。
まだperlはじめたばかりで、教科書にも載っていない事だったので
感激です。
0548nobodyさん
04/09/17 19:39:02ID:???0549nobodyさん
04/09/17 19:49:43ID:???0550nobodyさん
04/09/17 20:17:45ID:???アクセスカウンターが
2412351.5
みたいになっておかしくなるのでダメなんです。
0551nobodyさん
04/09/17 20:21:07ID:???0552nobodyさん
04/09/17 20:23:33ID:???いきなりテンプレのプログラムのための文字列を覚えてもさっぱりです
0554nobodyさん
04/09/17 20:40:58ID:???出力時に1ビット右シフト。
0557nobodyさん
04/09/17 20:53:37ID:???まずPerlが何の略かを調べればそれが答えになるかも。
つーか他に何か知ってる言語あるの?
それ書いてくれたら答えやすいかもしらん。
0560nobodyさん
04/09/17 22:54:49ID:???0562nobodyさん
04/09/18 12:04:43ID:???�dクス
0563538
04/09/19 01:32:18ID:n0F83URY僕も初心者なんですが、テンプレを丸写ししても何もわからないです。
僕が今している事は、よく使われるような関数(25個くらい)と、構文(10個くらい)
それと、正規表現、サブルーチン、ライブラリの使い方、これらを徹底的に
覚えようと思っています。いきなり完成されたテンプレからはじめるよりも
パーツから覚えていくほうが絶対にいいと思います。それと、ローカルで
CGIを動かせるように、perlやhttpd、apachなんかを入れておくと、htmlを
ローカルで動かすよに手軽にコーディングして動作確認できます。
お互いに、挫折せずに頑張りましょう
0564nobodyさん
04/09/19 01:50:03ID:???0565nobodyさん
04/09/19 05:10:18ID:vPjLXO2Q上記のような文字列検索を行っています。
$aの中身は"pc imode voda ezweb"です。
if(index $a,"ezweb"){ $b= $pcbnr;};の場合は正常に動作します。
"pc"と言う文字列だけは上手く判断出来ないようです。
何故でしょうか?
0566nobodyさん
04/09/19 05:40:18ID:???検索して何をしたいの?
それと最後の";"いらないよ
0567nobodyさん
04/09/19 05:57:32ID:???index $a,"pc"の返り値が0だから
つーか、indexが何をする関数か調べろ。
ただマッチングしたいんだったら
if($a =~ /pc/){
…
}
0568nobodyさん
04/09/19 06:00:15ID:???cgiでやるよりコンソール(.plファイル)でやったほうが効率いいかもよ。
行数少ないし、すぐにエラー行数分かるし。
0569nobodyさん
04/09/19 21:10:27ID:8Bm3sZnu書き込みを保存しているファイルから、指定した件数(仮に5件とします)だけ読み込み、続きも"次の5件"のようなリンクで5件ずつ読み込んで行きたいのです。
いろいろ参考書を読んでみましたが、方法が思いうかびません…
よろしくお願いしますm(_ _)m
あと、HTTPヘッダ排出のあとは2行あけないといけないと言われたのですが、なぜなのでしょうか?
0570nobodyさん
04/09/19 21:11:25ID:???0571nobodyさん
04/09/19 21:13:32ID:???0572nobodyさん
04/09/19 22:03:10ID:???ちゃんと最初からPerl勉強した方がいいと思う
>あと、HTTPヘッダ排出のあとは2行あけないといけないと言われたのですが、なぜなのでしょうか?
2行?1行じゃなかったっけ?とりあえずRFC嫁
0573nobodyさん
04/09/19 22:05:28ID:???569は改行コードが二つっていいたかったのかな。
0574565
04/09/20 00:38:39ID:WP+I8Woyif関数でも出来たんですね、パターンマッチ演算子は配列じゃないと駄目かと思っていました。
index $a,"pc"の返り値が0と言うのが解らないのです、$aは"pc imode voda ezweb"です。
自分で色々やってみた所、if(index $a," pc"){ $b= $pcbnr;};とすると思い通りに動作しました。
なぜ、半角スペースを入れるとするのでしょうか?
0576nobodyさん
04/09/20 01:52:41ID:???-1が返ってくるから。
indexが何する関数なのか調べろと567が言ってるだろ。
あと、おそらくおまいの思い通りには動いてないからな。
ためしにマッチしない文字でやってみなはれ。
ついでにifも調べて来い。
0577565
04/09/20 03:24:21ID:WP+I8Woy勘違いしていたようです。汗
indexは文字列検索に使う関数だと思っていたのですが、文字列の位置を返す関数なのですね。
CGIの本に書かれていたサンプルソースがパターンマッチっぽい例だったので、文字列検索向けの関数かと思っていました。
ifは数値が 「0」 か 「空」 の場合には偽、それ以外の場合には真なんですよね。
負の値も偽と判断されると思い込んでいました。
>>567さんのやり方で確実に動作する事を確認しました。
結構、適当にPearlを勉強していたのですが、もっと真面目にやろうと思います。汗
有り難う御座いました。
0579nobodyさん
04/09/20 04:16:07ID:???0580nobodyさん
04/09/20 06:08:04ID:???そお遠いわけでもないがな。
0581nobodyさん
04/09/20 09:22:55ID:???0582nobodyさん
04/09/20 10:17:23ID:???まあ、ガンガレ
0583nobodyさん
04/09/20 18:56:55ID:???3
と表示されました。どうなっているんでしょうか?
print "Content-type:text/html\n\n";
@_ = ("あ<>か","い<>き","う<>く");
@value = split(<>, @_);
print $value[0],<br>;
print $value[1],<br>;
print $value[2],<br>;
print $value[3],<br>;
print $value[4],<br>;
print $value[5],<br>;
print $value[6],<br>;
print $value[7],<br>;
0584nobodyさん
04/09/20 19:01:04ID:???0585nobodyさん
04/09/20 19:13:51ID:???0587nobodyさん
04/09/20 19:26:10ID:???0588583御破算
04/09/20 20:29:46ID:???え、そうなんですか(;_;)
>586
404は出ませんでした。httpdとinfoseekで確認しました。
>585>587
ありがとうございます。今携帯から見ているので、後で試してみます。
0590nobodyさん
04/09/20 20:47:03ID:???0591nobodyさん
04/09/20 21:15:09ID:???@value = split(<>, '3');
と同じ
0592nobodyさん
04/09/20 21:27:36ID:???0593583
04/09/20 22:31:17ID:???403でしたorz
>590
httpdがバグった、と思ったので…httpdで試してsyntax errorが出ず、永久ループでなくてもダメですか?
>591
ありがとうございます。それも調べてみます
>592
ローカルとはmyのことですか?だとしたらどこをローカル化すればいいんですか?
0594nobodyさん
04/09/20 22:39:12ID:???|
∩___∩ |
| ノ _, ,_ ヽ (( | プラプラ
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
0595nobodyさん
04/09/20 22:52:17ID:???ttp://support.microsoft.com/default.aspx?scid=kb;ja;879066
httpdがバグったって・・・。
何故プログラムを先に疑わないんだ。
0596nobodyさん
04/09/20 22:52:25ID:???0597nobodyさん
04/09/20 22:56:31ID:???@_ = ("あ<>か","い<>き","う<>く");
foreach(@_){
$baka .= $_;
}
@value = split(<>, $baka);
print $value[0],<br>;
print $value[1],<br>;
print $value[2],<br>;
print $value[3],<br>;
print $value[4],<br>;
print $value[5],<br>;
print $value[6],<br>;
print $value[7],<br>;
0599nobodyさん
04/09/20 23:20:32ID:???print "Content-type:text/html\n\n";
print $_."<br>",for split /<>/ ,join("<>",@_);
0600nobodyさん
04/09/20 23:27:37ID:???0601nobodyさん
04/09/20 23:28:38ID:???0602nobodyさん
04/09/20 23:29:06ID:???echo hage| perl aa.plすると、確かに3と出力される。
何が起こっているか誰か解説してくれ。
0604nobodyさん
04/09/20 23:34:53ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html#List_value_constructors
0606583
04/09/20 23:55:49ID:???よく強制終了するので…クロック数300�rヘルツ鯖(´・ω・`)
>599
join関数なんてあったんですね。知りませんでした
>591
>603で気付いた、前スレ誤解スマソ
>604
そういうことだったのか…
0608nobodyさん
04/09/21 21:16:47ID:UQFv84yKナイスなライブラリがないでしょうか・・・
もう自分で書くしか?
■ このスレッドは過去ログ倉庫に格納されています