【Perl】初心者コーナー Part13
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0686nobodyさん
02/07/07 12:56ID:xpVArwn6データの受け渡しをするプログラムを作っているんですが、
他のURLへジャンプさせるときに、
<A HREF="http://***/CGIスクリプト名?ジャンプ先URL">ジャンプ</A>
としたいんですが、ジャンプ先URLをフルパスで出せるようにするには
どうしたらいいですか?以下がつくった内容です。
my($encoding) = @_;
my($method) = $ENV{'REQUEST_METHOD'};
if ($method eq 'GET') { $query = $ENV{'QUERY_STRING'}; }
elsif ($method eq 'POST') { read(STDIN, $query,
$ENV{'CONTENT_LENGTH'}); }
local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}
my $req = new HTTP::Request POST => $val;
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');
my $res = $ua->request($req);
if ($res->is_success) {
$myd = $res->content;
$myd =~ s/(\<A HREF=\")/$1test.cgi?/g;
print $myd;
} else {
print "No!";
}
今の状態ですと、
$myd =~ s/(\<A HREF=\")/$1test.cgi?/g;
をやると、
<A HREF=test.cgi?test/index.html> というような感じになって
<A HREF=test.cgi?http://www.***.co.jp/test/index.html>
というような形になりません。
0687nobodyさん
02/07/07 16:41ID:???入力データをハッキリさせたら正規表現スレで質問すべき問題だろ。
0688nobodyさん
02/07/07 20:52ID:ZrDEUCOM686です。
<A HREF="http://www.test.co.jp/test.cgi?http://www.test.co.jp/next.html">ジャンプする</A>
正規表現スレでやればいいんですか?
それ以前のヴァカなもので、初心者スレで書き込んだんですが、
それも場違い?
答えも見つからず、困っていたのに(泣)
0689nobodyさん
02/07/07 21:33ID:???$link= qq(<A href="CGIのURL?$ENV{'QUERY_STRING'}">XXXへのリンク</A>);
0690nobodyさん
02/07/08 16:37ID:???半角数字以外が入力されたらエラーメッセージを返すとか
どう呼ぶのかわからないのですが、
よく使われる処理のモジュールというかライブラリーと言うのか
そんな感じのものを探すにはどうしたら良いですか?
googleしてみましたがキーワードが甘いらしく見つかりませんでした
0691nobodyさん
02/07/08 16:38ID:ZsVGz1/q0692nobodyさん
02/07/08 16:41ID:???送られてきたデータが /[^0-9a-zA-Z}/ 以外なら die とか。
0693nobodyさん
02/07/08 16:45ID:ZsVGz1/q0694nobodyさん
02/07/08 17:12ID:E09xqBbE1 3 6 10と返ってきてしまうのを、どうにかして
1 3 3 6 10にできないものでしょうか・・・?
0695nobodyさん
02/07/08 17:31ID:???@data = (3,3,10,6,1);
@sort_data = sort
{
$a <=> $b;
} @data;
0696nobodyさん
02/07/08 22:12ID:Hy1uHDxpそれだと、受け取ったURLそのまま出ちゃうんじゃないかい?
0697nobodyさん
02/07/08 23:54ID:HDd0iUwW0698nobodyさん
02/07/09 00:04ID:???0699nobodyさん
02/07/09 00:05ID:???0700nobodyさん
02/07/09 00:06ID:???「アァァァーグヴィ!」
じゃなかったっけ?
0701nobodyさん
02/07/09 00:11ID:???FORMを取得して
$post_mes="[email protected]&wcomment=test";
って感じにして(多分ここが違う?)
# POST
print SOCKET "POST $check_host HTTP/1.1\r\n";
#HTTP_REFERERを送信
print SOCKET "REFERER: $referer \r\n";
#User-Agentを送信
print SOCKET "User-Agent: $agent \r\n";
print SOCKET "X_FORWARDED_FOR: $xfor \r\n";
print SOCKET "Accept: */* \r\n";
print SOCKET "Accept-Language: ja \r\n";
print SOCKET "Accept-Encoding: gzip \r\n";
print SOCKET "\r\n";
print SOCKET "Content-Type: application/x-www-form-urlencoded\r\n";
print SOCKET "Content-Length: $length\r\n";
print SOCKET "\r\n";
print SOCKET "$post_mes\r\n";
みたいな感じでやってみたんですが駄目でした。
なんの反応もないみたいです。
なお、いたずら目的ではありません。Perlも自分のPCで動かしてます。
犯罪の悪寒・・・
0705702
02/07/09 00:27ID:???すいません。よく知らなくて・・・
0708.
02/07/09 00:41ID:???0710702
02/07/09 00:45ID:???dukeとか言うのですよね。探してみます
>>709
すいません。
lpwで検索してもよくわかんないと思ったらlwpだったんですね・・
0711nobodyさん
02/07/09 01:01ID:???print while(<SOCK>);
ってして、どんなレスポンス帰って来てるのか読んでみ
0712702
02/07/09 04:02ID:???なんとかPOSTできました。
0713nobodyさん
02/07/09 04:31ID:???ARGV = ARGuments Variable
だろ。
Value = 値
Variable = 変数
少しは勉強しろ
0715121
02/07/09 21:35ID:7t2WvFstちなみに僕はロリです、同士な人はいってください。
http://muke.up.to
0716nobodyさん
02/07/09 22:15ID:jsAirJtA0〜99の数字で(1,2,3,11,34)を含まない、配列を得るにはどうしたら良いのでしょうか?
例えば、(4、5、12)
0717nobodyさん
02/07/09 22:19ID:lugOGira& と = をsplitして文字コードを変換したんですが、
local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}
送られてくるデータの引数が複数ある場合は、このほかに
何かつけ加えなければならない?
0718nobodyさん
02/07/09 22:22ID:???if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0719nobodyさん
02/07/09 22:25ID:???0720nobodyさん
02/07/09 22:34ID:???@data = (1, 2, 3, 11, 34);
for ( 0..99 )
{
foreach ( @data )
{
push
}
}
0721nobodyさん
02/07/09 22:38ID:???4, 5, 12を除いてみた.
%exclude = (4 => 1, 5 => 1, 12 => 1);
@data = grep { !$exclude{$_} } 0 .. 99;
0723nobodyさん
02/07/09 22:40ID:lugOGiraそれってどういうこと?
よくわかんない…、スマソ
0724nobodyさん
02/07/09 22:45ID:???より、
=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
の方が早いって言いたいんじゃない?
0725716
02/07/09 22:51ID:???>>721
こんなに、すぐレスくれるなんて思っていませんでした。
有り難う御座います。
これから、考えてみます。なにせ初心者な物でチンプンカンプンです。
0726ヽ(`Д´)ノ ウワァァン
02/07/09 23:29ID:gcNlx8b2CGIファイルをエクスプローラーで見ようとすると文字化け! ヽ(`Д´)ノ ウワァァン
レンタルサーバー上にアップしたら文字化けしないのに! ヽ(`Д´)ノ ウワァァン
0727nobodyさん
02/07/09 23:45ID:???print "Content-type: text/html; charset=Shift_JIS\n\n"; ヽ(´∀` )ノ
0728
02/07/10 00:48ID:Q4ccJnsM$a = 10;
だと
$a2 で 20 になるのですか?
するどいな。だれにおそわった?
0730 .
02/07/10 01:09ID:???本当なの?
$a2 って変数は使えないの?
0731nobodyさん
02/07/10 01:13ID:fQbDc9qZ入力した文字を****と表示して
さらにクッキーにも****と記録するにはどうすればいいの?
…別に使う訳じゃないんだけど興味。
0732nobodyさん
02/07/10 01:13ID:???$a - 2 引き算
$a * 2 掛け算
$a / 2 割り算
0734nobodyさん
02/07/10 01:15ID:fQbDc9qZさんきゅ。
後は調べる
0735nobodyさん
02/07/10 06:44ID:???0736由々しき問題でありぞっとしない
02/07/10 07:10ID:???http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=utf-8&as_qdr=all&q=%E4%B8%AD%E5%AD%A6%E7%94%9F++%E5%9B%BD%E8%AA%9E%E5%8A%9B+%E4%BD%8E%E4%B8%8B+%E5%95%8F%E9%A1%8C&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0738nobodyさん
02/07/10 09:20ID:???全てのパスワードを同じ物にするようなマヌケな奴相手ならな。
まぁ、マヌケが多いのは確かだが。
0740nobodyさん
02/07/10 10:21ID:9iF/zPMpうまくいきませんでした
どうすれば良いですか?
#入力されたのが数字かどうかチェック
if($P eq /[^0-9]/){print "数字を入力してください。";}
else{
if($P == /[^0-9]/){print "数字を入力してください。";}
else{
0741nobodyさん
02/07/10 10:24ID:???=~ //
だろ。
0742740
02/07/10 14:18ID:lBfYsgMLできましたーーー!!
ありがとうございます
0745nobodyさん
02/07/10 16:58ID:???0746nobodyさん
02/07/10 17:04ID:???0747746
02/07/10 17:14ID:???0749nobodyさん
02/07/10 19:25ID:???それだと意味が変わるぞ。
>740の書き込みとif文の構成をよく見ろ。
0750nobodyさん
02/07/10 19:28ID:???それやるなら、
if ( $P !~ /^[0-9]+/ ) { }
か
unless ( $P =~ /^[0-9]+/ ) { }
じゃないと。
.htaacessでやるんじゃなかったっけ?
トリッパー使って3時間ほどadminで検索してたら偶然SE付きのがHITしますた
0754nobodyさん
02/07/10 22:02ID:???$fied[1]=~tr/a-zA-Z_0-9\/.\n?-!"#$%&'()\=~|\{\`\+\*}_?><,\/\\\];@\[\\^-/@/cs;
↑このように書くしかないんですかね?
[a-zA-Z_0-9]以外の文字ぜんぶをあらわす特殊変数みたいなのありませんか。
0755nobodyさん
02/07/10 22:03ID:01h+ntYo[^0-9a-zA-z\_]じゃだめなの?
0756nobodyさん
02/07/10 22:18ID:???0758nobodyさん
02/07/10 23:23ID:???じゃだめなの?
0759nobodyさん
02/07/10 23:26ID:PCSWC5jP$arg =~ s/(\W)/'%'.unpack("H2", $1)/ego;
のunpack関数を使ってみたんですが、これだと、
最初の文字1文字しかエンコードされないですよね?
例えば、
$arg=test.html?list=リスト&name=名前
なんかだと、最初の「リ」だけじゃなく、
「リスト」と「名前」の該当する文字全部が
変換されるようにするには、どうしたらいいですか?
0760nobodyさん
02/07/10 23:30ID:???おまいのegoがでてるよ。
0764nobodyさん
02/07/11 01:10ID:???0765nobodyさん
02/07/11 02:32ID:???0766nobodyさん
02/07/11 05:54ID:???君たちは勘違いをしている。s/foo/bar/という構文の中で正規表現は
"foo"の部分だけなので例え"o"オプションをつけたからといって"bar"
のほうにはなんら意味がない。"o"は「正規表現」を一回だけコンパイル
するオプションであって置換内容をコンパイルするものではないという
事だす。
my $target = "AAAcccAAA";
for my $replacement ( qw/ bbb ddd / ) {
my $tmp = $target;
$tmp =~ s/ccc/$string/go;
print $tmp, "\n";
}
0767nobodyさん
02/07/11 07:05ID:???0768nobodyさん
02/07/11 07:13ID:???こっちから、また尋ねないと解らないような質問ヤメテくれ
0769nobodyさん
02/07/11 07:21ID:???説明がおかしかったですか。。例えば、
print "Content-type: text/html;\n\n";
こうゆうのが出力された後ならCookieに書くとかできないじゃないですか
だから、ヘッダが出力されているかどうか調べたいのですが。。
こういたことはできますか?
0770nobodyさん
02/07/11 07:43ID:???>print "Content-type: text/html;\n\n";
こう言うのを探せば良いんじゃ無いの?
端末側で吐いてる事確認したいのなら
オミトロンとかで吐き出せる
0771nobodyさん
02/07/11 09:21ID:???ヘッダとボディの区切りは改行
print "Content-type: text/html;\n";
print "Set-Cookie: name=value;\n";
〜〜〜 ↑ヘッダ 〜〜〜
print "\n";
〜〜〜 ↓ボディ 〜〜〜
print 〜〜〜
0773nobodyさん
02/07/11 14:06ID:???ソース追ってるってことではないです。。
>>771
それは分かっています。
区切りの改行が出力されたらもうヘッダに書き込めなくなるじゃないですか
だから、区切りの改行が出力されたかどうかPerlで調べたいです
こういったことはできないのでしょうか。
0776nobodyさん
02/07/11 14:26ID:???perlではそんなことをいちいち区別してない。
0777nobodyさん
02/07/11 15:13ID:/kd92Z8Gprintの内容を送るだけ、そのあとはhttpdの仕事
判断するなら771の言うように改行を調べれば良い。
our $headers_end;
sub myprint
{
$headers_end = 1 if /^$/;
print @_;
}
とか、どう?。
printをオーバーライドしてもいいかも。
# >>753 トリップ変えました。ありがとう
どういたしますて
0781nobodyさん
02/07/12 02:47ID:???> GDモジュール、どうしても使えない。。
>
> 1 :nobodyさん :02/07/09 00:13 ID:k+y90VS+
> サーバはWebARENA Suite、
> GD.pmを使おうと
> サーバにコンパイル済みのGD1.27をアップするがどうしても
> うまく動かない。
>
> perl: error in loading shared libraries: ./auto/GD/GD.so: undefined symbol: gdImageJpegPtr
>
> こんなエラーが出る。。
> どうすればいいのか。。
> WebARENAはPerlは5.0.503だから、その環境でコンパイルしたものを選んだ。
> なぜだ、、何が、、いったい。。
0782781
02/07/12 02:47ID:0osVMAyz例によって親切には説明するつもりはないのでそのつもりで。
1. とりあえず telnet.cgi をまともに動かして。
2. gd-1.8.4.tar.gz(libgdのソース)というふぁいるをGETして。
3. CPANよりGDモジュールのソースふぁいるをGETして。
4. 二つのファイルをtelnet.cgiと同じdirにUPして。
5. 二つのファイルをtarで解凍して。
6. インストール先dirをcgi-bin以下にlib,include,bin,man作成
7. gd-1.8.4/Makefileを編集(インストール場所を6で作成したdirに設定)
8. gd-1.8.4をmake; make install
9. GD-1.40/Makefile.PLの
$DEFINES .= ' -DHAVE_XPM' if $XPM;
をコメントにする。
10. GD-1.40のDIRで[ perl Makefile.PL LIB=/virtual/おまえのIP/cgi-bin/lib/perl5 INSTALLMAN3DIR=/virtual/おまえのIP/cgi-bin/man/man.3 ]実行
11. 10で出来たMakefileに8でインストールしたgdへのLIBパスとINCパスを追加して,X関連のリンク(だっけ?-lx11とか)を削除
12. make; make install
13. GD使うスクリプトの冒頭で #!/usr/local/bin/perl -I../lib/perl5/i386-linux とでもしてくれ。
15. あとはてめぇでがんばれ。
16. 意味がわからん?ってか,わからんならやらないでくれ。他に迷惑がかかるかもしれんし。
とりあえず,demo/gd_example.cgi は動いたぞ。
# /usr/libにlibgdがあるのにヘッダがない罠…。
いくらわからんからって単発スレは立てないでくれ。
あなたのスレ立てのために他のスレがdat落ちするじゃね〜かよぉ〜。
0784nobodyさん
02/07/12 12:08ID:???if($name eq ''){print "hoge";}
と
print "hoge" if(!$name);
は処理的には同じに思うんですが
書き方以外に何か違う意味とかってあるんですか?
■ このスレッドは過去ログ倉庫に格納されています