Perl コーディング初心者質問コーナー Part37
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/22 01:41ID:???誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0477457
04/09/15 12:29:12ID:OFkP/WKYスレ違いかも知れませんが、CGI::Sessionを勉強したいのですが、
いくら検索しても簡単な解説でどこで入手出来るか解らないサイトしかなく、
具体的に丁寧に解説してある書籍・サイトとかありますか?
CGI session perl クエリ 等で検索してもなかなか見つからなく、
Amazonで検索してもCGI Session だとヒットしないので・・・。
なんとか下記のサイトを見つけましたがCGIセッションに関する記述が少なくて・・・
ttp://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FWalrus%3A%3ASession%3A%3ALite
ただ単純にURLのクエリ文字列?にIDやパスワードが表示されないようにしたいだけなのですが、、難しいもんですね
ページ上のリンク(かなりありますが)を全てフォームボタンでPOSTで送信するように作成した方がいいのでしょうか?
0478nobodyさん
04/09/15 12:59:29ID:???>今の時代にcgi-lib.plかよ
CGI.pmの方が処理が重い。utf8,16なんぞも入ってるからな。
cgi-lib.plで済むところでは、あえてCGI.pmを避けるのがプロ。
0480nobodyさん
04/09/15 13:08:39ID:???CGI::Session説明してるサイトが見つからないだと?
試しにCGI::Sessionでググったらトップにきましたが。
それ見てわからないんだったら入門書見直した方がいい。
0481457
04/09/15 13:25:08ID:OFkP/WKYそういうページは既に見ました。
どういう仕組みかは書いてありますが、
具体的にどこで入手したりとかそういった方法も解らなくて、
perl/cgi入門書にも載ってなくて、CGIセッションの本があるなら是非買いたいのですが、
Amazonで検索しても見つからないので途方に暮れているのです。
気に障ったようですいません。
0483457
04/09/15 13:36:33ID:OFkP/WKYそのソフトも試してみましたが、
やはり認証後ページからリンクをクリックするとIDとPASSがURLに追加され
表示されてしまいます。
段々、スレ違いになってきているようなので退散します。
すいませんでした
0484nobodyさん
04/09/15 13:51:16ID:???>>5
http://search.cpan.org/~sherzodr/CGI-Session-3.95/
0485nobodyさん
04/09/15 13:53:46ID:???0488※ ◆r7Y88Tobf2
04/09/15 15:54:43ID:???どうすればスペースが開かないようにできますか?
0492nobodyさん
04/09/15 17:25:34ID:???0495nobodyさん
04/09/15 17:49:10ID:???0496nobodyさん
04/09/15 19:19:54ID:???datファイルの5行目をいきなり(1から4行目は読ませず)変数に読み込ませるにはどうしたらいいですか?seek関数では無理ですか?
datファイルの例
[0001](\n)
04/09/15(\n)
Name(\n)
http://www.〜〜(\n)
〜@〜.co.jp(\n)
Pass(\n)
IP(\n)
……
0497nobodyさん
04/09/15 19:58:31ID:???ttp://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch08_09.htm
0500500
04/09/16 07:33:57ID:???他の #exec cgi と #include virtual は何を使えば実行してくれるのでしょうか?
0501nobodyさん
04/09/16 08:35:14ID:???何言ってるかわからんぞ。
SSIとかCGIなどは、httpdサーバ(たぶんApache)の設定で実行できるか
どうかが決まる。
それと#exec cmd とか、#exec cgi とか、 #include virtualって何だ?
#はコメント記号だが。Perlスクリプトに何て書いたか書いてみろ。
0502500
04/09/16 09:10:41ID:???ssiのコマンド exec 引数 cmd を perl で実行するには require で出来ますよね?
ssiの他の、#exec cgi や #include virtual は perl ではどうやって呼び出したら実行してくれるのか。と言う事です。
0503500
04/09/16 09:16:23ID:???0504nobodyさん
04/09/16 11:05:43ID:???近いものを選ぶとこんな感じになるのかな。
<!--#exec cmd="test.pl"--> →require
<!--#exec cgi="cgi-bin/test.cgi"--> →socket
<!--#include virtual="test.txt"--> →open
0505nobodyさん
04/09/16 11:06:40ID:kf2OMroI渡した"keyword"を受け取ったcgiのほうで
変数に入れる方法が知りたいのですが・・・。
よければその方法(?で何か渡す)を何と呼ぶのか
キーワードだけでも教えてもらえれば調べます、
初歩的ですいません。よろしくおねがいします。
0506505
04/09/16 11:15:26ID:???調べたら出てきました、「引数」ですね
ほんとすいません・・・・
ttp://tohoho.wakusei.ne.jp/wwwcgi3.htm
0507nobodyさん
04/09/16 12:04:04ID:???キーワードは「クエリ メソッド」
GETの場合既に$ENV{'QUERY_STRING'}に"keyword"が入ってる
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も調べて来い。
■ このスレッドは過去ログ倉庫に格納されています