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

くだすれPerl(超初心者用)

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/10(日) 13:33:48ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、  
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。  
Perl使いが優しくコメントを返しますが、  
お礼はPerlの布教と初心者の救済をお願いします。  
0046nobodyさん2006/10/27(金) 02:03:16ID:???
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common;
use HTTP::Headers;
print 'URI > '; chomp ( $entry = <> );
$entry =~ 'http://([^/]*)/([^/]*)/([^/]*)/([^/]*)/([0-9]*)';
($uriServer, $uriBbs, $uriKey, $uri) = ($1, $4, $5, "http://$1/test/bbs.cgi";);
print 'MESSAGE > '; chomp ( $msg = <> );
$ua = new LWP::UserAgent;
$request = POST ($uri, [
subject => '',
FROM => '',
hana => 'mogera',
submit => '書き込む',
mail => 'sage',
MESSAGE => $msg,
bbs => $uriBbs,
key => $uriKey,
time => time]);
$request -> referer($uri);
$request -> user_agent('Monazilla/1.00');
$cookie_jar = HTTP::Cookies -> new( file => 'ume.cook', autosave => 1 );
$cookie_jar -> add_cookie_header($request);
$ua -> cookie_jar($cookie_jar);
$response = $ua -> request($request);
0047nobodyさん2006/10/29(日) 16:12:26ID:???
最近,Perlを使ったCGIで特定IPを拒否するルーチン入れてあり,
そのリストにあるIPにも関わらず書き込みをされるのですが,どんな原因が考えられますか?
例えば,自分のIPが200.10.10.10の場合,正規表現で指定して(200.*.*.*)もきちんと自分は拒否されます。
それなのに,いくつかすり抜けてくる迷惑書き込みは,一体どのようにしてるのでしょうか?
当然,直接そのIPを指定しても,効果がありません。(上の場合なら,200.10.10.10)

考えられるのは,�@Perlが取得するIPアドレスの関数が偽装される。←可能なんでしょうか??
�A違うCGIで直接ログファイルに書き込まれている。
というくらいしか思いつきません。
�@はともかく,�Aに関しては,プロバイダがHi-HOなので,こちらで細かいパーミッションの指定ができません。(たぶん)
他にも原因や対策がありますか?
0048nobodyさん2006/10/29(日) 20:10:26ID:???
3、そのルーチンがバグっている。

というか2ならログファイルの名前変えてダミー置いとけば解決じゃないのか。
0049nobodyさん2006/10/30(月) 01:09:22ID:???
リファラーをチェックして
他のサーバからの呼び出しを蹴る様にしたら?
正規表現でやると部分一致ですり抜けたり、リファラー自体が
偽装できるんであくまで簡易的だけどね。

my $myhome = "http://www.vipper/test.cgi";

if( !$ENV{'HTTP_REFERE'} =~ /^$myhome/ ) {
#エラー処理
} else {

}
0050nobodyさん2006/10/30(月) 03:31:49ID:???
/^\Q$myhome\E/
0051nobodyさん2006/10/30(月) 07:32:12ID:???
>>50
訂正ありがとう。
あとさ、馬鹿なんじゃねーかと。

REFEREって・・・REFERERだよな、ごめん。
0052nobodyさん2006/10/30(月) 21:36:17ID:???
余談だが、単語の綴りって意味で正確には
referrer
なんだけどな。
0053472006/10/31(火) 18:03:41ID:???
色々とアドバイスありがとうございます。
>48
ログファイル名変更が効果あるのは他のCGIで経験済みです。
最終手段だと思ってます。
それよりも,原因や他の技術的な対策などが知りたかったので。
言葉足らずですみません。

>49
試してみます。
0054nobodyさん2006/10/31(火) 20:28:02ID:???
ZIPやGZIPではなく、LZHを展開するモジュールはありますか?
0055nobodyさん2006/10/31(火) 21:15:35ID:???
無かったんじゃない?
0056nobodyさん2006/10/31(火) 22:44:48ID:???
コマンド呼び出ししかないだろうな。
0057nobodyさん2006/11/08(水) 04:25:42ID:???
文字コードshift_jisのままで、文字列中の\を置換する方法はありますか?
s/\\/?/g;
普通にこう書くと5Cを含む2バイト文字が化けてしまいます
0058nobodyさん2006/11/08(水) 05:28:40ID:???
quotometa
\Q\E
0059nobodyさん2006/11/24(金) 00:36:56ID:67lrIFIn
Perlからお気に入りのタブブラウザを起動するにはどうしますか?
0060nobodyさん2006/11/24(金) 00:46:06ID:???
system(起動プログラム);
0061nobodyさん2006/11/24(金) 00:50:56ID:???
>>60
できました!
ありがとうございます。ペコリ
0062nobodyさん2006/12/02(土) 17:26:24ID:???
>>46
の間違いって
$request -> user_agent('Monazilla/1.00');
$ua -> user_agent('Monazilla/1.00');
以外にある?

このあたりだと思うんだけど
$cookie_jar = HTTP::Cookies -> new( file => 'ume.cook', autosave => 1 );
$cookie_jar -> add_cookie_header($request);
$ua -> cookie_jar($cookie_jar);


0063nobodyさん2007/01/07(日) 08:03:18ID:???
CGIを作ろうとPerlの勉強を始め、
テキストに命令文を書き込んだのですが、
動作確認の仕方が分かりません。

書いたスクリプトを起動するにはどうすれば良いのでしょうか?
0064nobodyさん2007/01/07(日) 09:40:28ID:???
Perlをインストールしないと確認できません
0065nobodyさん2007/01/08(月) 10:40:10ID:???
ありがとうございます。
これからPerlのインストール方法を探しに行って来ます。
0066nobodyさん2007/01/08(月) 13:13:18ID:???
$host = $ENV{'REMOTE_HOST'}

このようにホストを取得した場合
これを
aaa.bbb.ccc →*.bbb.ccc
のように
一部を隠す場合はどのようにしたらいいでしょうか?
ホストの取得方法を変えなければいけませんか?
ご教授くださいませ


0067nobodyさん2007/01/11(木) 08:43:23ID:???
>>66
置換してから出力すればいいんじゃない?
0068nobodyさん2007/01/11(木) 08:45:37ID:???
>>66
$foo =~ s/.*?\.(.*?)/\*\.\1/;
かな
0069nobodyさん2007/01/11(木) 20:27:34ID:???
他のperiスレでも質問したのですが、スルーされてしまいました・・
マルチっぽくなってすみません。
拡張子が.plのスプリクトの動かし方を教えてください!!!
ActivePerlをインストールしたのですが、そこからどすればいいのか分かりません・・
.plファイルをダブルクリックしてもコマンドラインが一瞬でて消えるだけです・・
サーバーをレンタルしないといけないのでしょうか?
どなたか教えてください!!!
0070nobodyさん2007/01/11(木) 22:50:22ID:???
貴様が質問した1レスあとに答え書いてあるだろメクラ
00715442007/01/12(金) 00:31:09ID:???
難しくて意味が分りません!!!!!
コマンドプロテクトとかじゃなくて、exeファイルみたいに直感的に扱いたいです。

消防に分かるようにお願いします!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0072nobodyさん2007/01/12(金) 03:40:35ID:???
でんげんコードをぬいて、自分の首にまいて、ちからを入れてひっぱる
0073nobodyさん2007/01/13(土) 07:21:59ID:???
>>903

そこまでやりました。
そしたら勃起しちゃいました・・
次はどうすれば?
0074nobodyさん2007/01/15(月) 22:32:53ID:h8620fdS
P2Pのゲームを作っていて、perl/CGIを使ってマッチングロビー、perl/cgiと
MYSQLを使って認証とプレイヤーの成績データのdbプログラムを組んでしま
す。
マッチングも認証プログラムもdbも完成するめどがたっているんですが、
ネット上に公開するとき、サーバの負荷とか良く分かりません。

たとえば、スクリプトが大きくなるけど、一度のサーバーアクセスで全て処
理できるよう、認証・マッチング・db処理のスクリプトを一つにしたほう
がいいのでしょうか。
ほんの少しサーバのアクセス回数が増えるけど、マッチングと、認証・dbを
分けてサイズを小さくし、必要な時に必要なCGIを呼び出した方がいいので
しょうか?

本当にくだらない質問ですみません。
0075nobodyさん2007/01/17(水) 09:50:41ID:???
当方環境がWINなので、ActivePerl5.8をインストールしました。
UNIXサーバーをレンタルしてcgiで動かす場合、通常のPerl5.8は必要なのでしょうか?
ActivePerlと共存しても大丈夫なんですが?
初歩的な質問ですみませんが、教えてくださです><
0076nobodyさん2007/01/17(水) 13:19:17ID:???
>>74
負荷を気にするならPerl CGIを選択する時点で間違い
>>75
バージョンはプログラムによる
PerlとActivePerlは共存させる必要はない
0077nobodyさん2007/02/05(月) 22:01:41ID:Utbdeaaf
Encode.pmは難しいので、使っているサーバがperl5.8対応でも、jcode.plを使ってもいいでしょうか?
本当に、何が何だが分からない質問で、すみません・・・
0078nobodyさん2007/02/05(月) 22:08:13ID:???
使えるよ。置換してるだけだから
0079772007/02/05(月) 22:56:56ID:Utbdeaaf
>>78
返答ありがとうございます。

0080nobodyさん2007/02/07(水) 23:15:43ID:5L64/RF4
dat.txtファイルに
あ
い
う
え
とあって、「う」だけを表示させたいのですが、どういったプログラムになるのでしょうか?
0081nobodyさん2007/02/07(水) 23:59:35ID:???
エスパーさ〜〜ん、かも〜〜ん
0082nobodyさん2007/02/08(木) 01:05:33ID:???
>>80
print "う";
0083nobodyさん2007/02/08(木) 12:46:57ID:ySrCcQfc
別に「う」を表示させたいわけじゃない。
datファイルにある3列目の文字を表示させたい。
0084nobodyさん2007/02/08(木) 14:04:25ID:???
open(IN, "dat.txt");
while (<IN>){
print if($.==3);
}
close(IN);
0085nobodyさん2007/02/08(木) 14:25:54ID:???
open IN, "dat.txt" and print <IN>[3];
テストしてない
0086nobodyさん2007/02/08(木) 15:27:19ID:???
ありがとうございます。感謝です。
0087あっこ2007/02/08(木) 19:36:08ID:LIdpjyEo
A
http://docomo-camera-ne.jp/zeidoroom/20070208192740.jpg

B
http://docomo-camera-ne.jp/zeidoroom/20070208193455.jpg

ソース教えていただけませんか??
0088nobodyさん2007/02/08(木) 19:51:42ID:???
>>87
とりあえずいくつものスレにまたがって質問して回るのを止めろ。
0089nobodyさん2007/02/08(木) 20:48:25ID:???
CGI.pmってバグあるんですか?
バージョンは2.9です。
print $cgi->end_form;
って入力してもプリントされないんですが・・・
0090912007/02/08(木) 20:58:18ID:???
あ、すみません間違えました。

print $cgi->end_form;

ってやると、何故か、
<div></div></form>
ってプリントされるんです。
この<div>はなんなんでしょう?入れた覚え全くないんですが・・・
0091nobodyさん2007/02/09(金) 07:36:17ID:???
>>87
おまえCの宿題スレにもいたけど大丈夫なのか
0092nobodyさん2007/02/10(土) 14:46:42ID:???
CGIレスキューのショッピングバスケットプロ v6を使用しています。
このたび、アフェリエイト用のトラッキングタグを入れることになったのですが、
金額に関する変数の設定がわかりません。

cart.cgi内部の
$fee、$fee2、$SHOKEI2、$SHOKEI2、$orders

setup.cgi内部の
$j

など入れてみましたが、数値が出ません。

タグは注文の最終画面に入れ込みます。
注文IDに関してはすぐに出たのですが。。。。

エロイ方ご教授くださいませ。
0093nobodyさん2007/02/10(土) 17:59:27ID:???
>>92
改造スレへGo

っていうか仕事を2chに持ち込むなYO
0094922007/02/11(日) 12:29:23ID:???
>>93

誘導有難うございます。

がんばってみて、駄目なら移動してみます。
0095nobodyさん2007/02/18(日) 20:10:51ID:???
ttp://www.42ch.net/UploaderSmall/source/1171796861.zip
このスクリプトで、ログファイルへのデータ追加時に
現在の年日時を取得して
2007/2/18 20:09
のような形式で行の末端に自動的に書き込むようにしたいのですが、
どの部分にどのような処理を加えれば良いでしょうか?
0096nobodyさん2007/02/24(土) 08:30:18ID:vuvrJgei
最近外国人が宣伝目的で掲示板に書き込むので、なんどかしたい。
他の掲示板でも攻撃を受けているのをよく見かけます。

特徴としては、アルファベットのみで書き込むので、アルファベットのみの投稿の場合は
エラーにしたいのですが、そんなことは可能でしょうか?

0097nobodyさん2007/02/24(土) 10:17:57ID:???
>>96
EUC-JPだけど
# $str に ASCII 以外が含まれているか判定する

if ($str =~ /[\x8E\xA1-\xFE]/) {
print "含まれている\n";
}
引用元
http://www.din.or.jp/~ohzaki/perl.htm#JP_Exist
0098nobodyさん2007/02/26(月) 13:07:30ID:bWsttIN4
改造です。
先頭行でなく最終行を取得しないとマズいことに気づいたんですが
どうすればいいでしょうか。
---------
if ($in{'ori_ie_id'} eq "admin"){
$bbs1_log_file = "./member/admin/bbs".$in{'bbs_num'}."_log.cgi";
}else{
$bbs1_log_file = "./member/$in{'ori_ie_id'}/bbs1_log.cgi";
}
open(IN,"$bbs1_log_file") || &error("Open Error : $bbs1_log_file");
# 先頭行を取得
$total_counter = <IN>;
($total_counter,$all_total_counter)= split(/<>/, $total_counter);
$top = <IN>;
local($b_num,$b_name,$b_date,$b_res,$b_count,$b_com)= split(/<>/, $top);
--------------------------
0099nobodyさん2007/02/26(月) 16:00:02ID:???
よし、エスパー3級の俺が答えてやろう。

複数行の入力を取った場合配列になる。

@lines = <INPUT>;

この場合に最後の要素はこう所得できる。

$lastline = $lines[-1];

もしくはこう書いても良いだろう。

$lastline = pop(@lines);

これらの違いについてはマニュアルを嫁。

分かったら次からはエスパーじゃなくても分かる言葉で書くように。
0100nobodyさん2007/03/07(水) 21:52:50ID:???
なんか、トロイの木馬が検出されましたと出た。
0101nobodyさん2007/03/22(木) 13:03:52ID:RsfMZKm1
$value = '%e6%97%a5%e6%9c%ac%e8%aa%9e';
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
として走らせたところ、スクリプトをウェブサーバを通して呼んだときと
同じサーバのコマンドラインから呼んだときで
$valueの中が変わってきてしまいます。

linuxコマンドライン:ツづ可づ卍づアツつイ
linux上ウェブサーバ:にほんご

どうしてこうなっちゃうんでしょうか・・
コマンドラインから呼んだときでも"にほんご"とする方法はありますか?
0102nobodyさん2007/03/22(木) 13:08:13ID:???
そのコンソールは日本語表示に対応してますか
01031012007/03/22(木) 14:06:12ID:???
ごめんなさいよくわからないです。
linuxのサーバへはwindows上のtelnetでつないでまして、
さきほど、簡単にprintで"にほんご"と表示させるだけ、
もしくはファイルとして保存するだけのスクリプトを
スクリプト自体の文字コードをいろいろ変えて走らせてみたところ、
どれも漢字混じりでぐちゃぐちゃっとなり、まともに出ませんでした。
これって対応してないって事ですかね。。
0104nobodyさん2007/03/23(金) 12:35:39ID:???
せめてTeraterm使ってください
0105nobodyさん2007/03/26(月) 05:21:22ID:???
表示文字コードを変更できないプロンプトってあるの?
0106nobodyさん2007/04/18(水) 00:42:41ID:2fOrfnuV
#ディレクトリを開く
print "変換するフォルダのパスを入力してください\n";
$folder_path = <STDIN>;
chomp($folder_path); #改行コード削除
opendir(DIR, "$folder_path");
@file = readdir(DIR);
closedir(DIR);

#ファイル名を調べる
foreach (@file)
{
#htmlファイルなら処理
if( $_ =~ /.html/ ){
print "$1\n"; ##ここは呼ばれるが$1が空##
#ファイルを開く
open(F, "+< $_.$1" );
#ファイル1行読み込む
while($line = <F>){
#iso-8859-1をShift_JISに変換
if( $line =~ s/charset=iso-8859-1/charset=Shift_JIS/ ){
print(F "$line");
}
}
close(F);
}
}

htmlファイルの文字コードをかえるコードを書きたいのですが、うまくいきません。
どこが、間違ってるのでしょうか?
0107nobodyさん2007/04/18(水) 01:10:01ID:???
まずエラーメッセージを書こうぜ
01081062007/04/18(水) 01:17:05ID:2fOrfnuV
#ディレクトリを開く
print "変換するフォルダのパスを入力してください\n";
$folder_path = <STDIN>;
chomp($folder_path); #改行コード削除
opendir(DIR, "$folder_path");
@file = readdir(DIR);
closedir(DIR);
#ファイル名を調べる
foreach (@file)
{
#htmlファイルなら処理
if( $_ =~ /([A-Za-z0-9_]*\.html)/ ){
print (STDOUT "$1");
#ファイルを開く
if( !open(F, "+< $floder_path.$1" ) ){
printf(STDOUT "HTML読み込み失敗\n");
}
#ファイル1行読み込む
while($line = <F>){
print(STDOUT "変換\n");
#iso-8859-1をShift_JISに変換
if( $line =~ s/charset=iso-8859-1/charset=Shift_JIS/ ){
print(F "$line");
}
}
close(F);
}
}
としたところ、
ファイル名 HTML読み込み失敗
と表示されます。
0109nobodyさん2007/04/18(水) 01:22:04ID:???
じゃ動いてんじゃん
01101062007/04/18(水) 01:23:05ID:2fOrfnuV
ループにはいるまえに、カレントディレクトリをへんこうし
#カレントディレクトリ変更
chdir("$folder_path");

open(F, "+< $floder_path.$1" )を
open(F, "+< $1" )とすると置換の部分は実行できました。
しかし、置換前の文字が残ってしまいます
0111nobodyさん2007/04/18(水) 01:59:13ID:???
>置換の部分は実行できました。
>しかし、置換前の文字が残ってしまいます

バカじゃないんだから実行前の入力文字列と実行後の出力文字列くらい出せや
0112nobodyさん2007/04/18(水) 02:06:45ID:???
香ばしいなぁw 俺にもあったわこんな時代www

>>108
ファイル変換系の処理は「読み込むファイルに書き戻す」よりも
「読み込みつつ別のファイルに書き出す」ようにした方がいい。
書き出しが終わった後で削除&リネームすればいいだけだし、
途中で処理が止まっても安全。

あと微妙に板違いだから次からはプログラム板行けなw
01131062007/04/18(水) 02:57:11ID:2fOrfnuV
別ファイルに書き出しでやってみます
ありがとうございました。
つぎからはプログラム板逝きます
0114nobodyさん2007/04/18(水) 03:45:43ID:???
島根県のみなさん、パチンコをするなら、

  優良パチンコ店 エ○トワン  

に行こう! 遠隔(※1)をやっていないパチンコ店は「エイ○ワン」だけ!
違法ロム(※2)を使っていないパチンコ店も「エイト○ン」だけ!
○イトワンでは、遠隔等が可能な設備は入れていません。 ロムも、警察がチェックしやすくしています。

詳しい方はご存知の通り、どんなにパチンコの遊戯人口が変動しても、その市場規模は変わりません(※3)。
要するに、客が減っても、残った客から絞り盗る量を増やして調整しているのです。
しかし、何故それが可能なのか?…ご理解頂けると思いますが、9割以上の店が確実に遠隔等を行ってます。
1万店以上のパチンコ店の中で、遠隔も違法ロムも確実にやってないのは「○イトワン」ただ1店です!

※1…遠隔とは
 「お、あの客は新顔だな。勝たせて味を占めさせるか。遠隔操作で設定変更しよ」
 「客が減ってきたな。ま、設定を絞めて(違法)、1人あたりから搾る量を増やせばいいか」
 「あのオヤジ負け続けてるからそろそろ辞めるかもな。今日は勝たせてやるか」

※2…違法ロムとは
 「うちのアタリ確率は、もちろん他と同じ『○○○分の1』ですよ!(ロムいじってるからウソだけど)」

※3       市場規模   遊戯人口
 平成06年 30兆4,780億円 2,930万人
 平成08年 30兆0,630億円 2,760万人
 平成10年 28兆0,570億円 1,980万人
 平成12年 28兆6,970億円 2,020万人
 平成14年 29兆2,250億円 2,170万人
 平成16年 29兆4,860億円 1,790万人
0115nobodyさん2007/04/24(火) 12:15:29ID:???
perlでそれなりに大きなCGIを作ることになったのですが
いろいろな関数をまとめた物を作るときに
それらを単純にまとめただけの外部plファイルを
requireして使いまわすよりも、パッケージ化や
モジュール化して使ったほうが良いと
聞いたのですが、何故でしょうか
0116nobodyさん2007/04/24(火) 14:22:11ID:???
パッケージ化することによって、関数(メソッド)や変数(属性)の名前衝突を避けることができ、
モジュールをつかいまわす場合に有効。
0117nobodyさん2007/04/24(火) 14:37:40ID:RJoF4cmJ
Windowsマシンで、Apache + ActivePerlを使用して、ローカルでPerlの勉強をしているんですが、
Perlのコードにエラーがあると、
use Strict; を記述しても、500 Internal Server Errorになってしまいます。
(どういうエラーが出たか教えてくれない)
エラーを表示させるにはどうしたらいいんでしょうか。

各バージョンは、
Perl v5.8.8
Apache 2.0.59
です。
0118nobodyさん2007/04/24(火) 17:10:54ID:???
>>116
なるほど。変数名の衝突を気にしなくてもいいのは便利ですね
これからパッケージの勉強からしてみます
ありがとうございました
0119nobodyさん2007/04/24(火) 17:23:24ID:???
>>117
スクリプトの頭に

BEGIN {print "Content-Type: text/plain\n\n"; $| = 1; open(STDERR, '>&STDOUT')}

とでも書いとけ
0120nobodyさん2007/04/25(水) 02:24:17ID:lSJlnLTR
>>117
モジュールつかっとけ
use CGI::Carp qw(fatalsToBrowser);


ttp://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Carp.pod
0121nobodyさん2007/04/25(水) 20:53:26ID:???
[ディレクトリ構成]
xxx/
 index.html
 
 data/
  post.dat

cgi-bin/
 xxx/
  post.cgi

と置いてあります。このとき
#!C:/Perl/bin/perl
open(OUT,">> ../../xxx/data/post.dat");
print OUT "$FORM{'posturl'}\n";
close(OUT);

と post.cgi に記述してみたのですが、うまく
post.dat のほうに $FORM{'posturl'} の内容が書き込めていないようでした。
パスの設定ミスだとは思うのですが…

環境は,windows xp sp2 上 でApache/2.0.45 を使用しております。
どうぞよろしくお願い致します m(__)m
0122nobodyさん2007/04/25(水) 22:02:43ID:???
それだけじゃさっぱり
0123nobodyさん2007/04/25(水) 22:56:34ID:???
自己解決スマソ。
open(OUT,">> ../../htdocs/xxx/data/post.dat");

とすれば良かったみたいです。
htdocs/
- xxx/index.html
- xxx/data/post.dat

cgi-bin/xxx/post.cgi

webプログラムってプログラム以外の部分がややこしい…
0124nobodyさん2007/04/26(木) 16:20:32ID:Xsmaee58
■ Perl言語 ■ 何でも質問コーナー ■
http://mixi.jp/view_bbs.pl?id=17607679&comm_id=1401396
Perlに関すること、cgiに関すること
なんでも質問できるコーナーです(たとえばApacheとかでもOKとします!)
(Web系であればOK)

ルール:
Google検索で調べてわかるようなことでも質問してもOKです
(初心者のうちは、どの情報を取捨選択したらイイのかわからないと思うので)
回答してくださるかたは、暖かく質問者を迎えてやってください
o(^^o) (o^^)o
0125nobodyさん2007/05/01(火) 16:23:34ID:???
PerlでファイルアップロードCGIを作ろうとしています。
「1. ファイルを選ぶ 2. 確認画面 3. 送信完了」と動作させようとして
躓きました。2. 確認画面を表示しない場合はうまくいくのですが、
確認画面を間に挟むと空のファイルがアップロードされてしまいます。

1 から直接 3 にいくプログラムは次のように組んであります。
 1. CGI.pmを使ってfilefield('file');でファイル選択させる。
 3. $fh = upload('file'); でファイルの情報を得て、
   while(read...){print...} でファイルを書き込む。

2 をはさむときは、param('fh', $fh); print hidden('fh');
として情報を保存しました。

たぶん、上の方法では必要な情報を保存しきれていないのだと
思うのですが、どうすればよいかわかりません。よろしくお願いします。
0126nobodyさん2007/05/03(木) 02:37:57ID:???
無理
0127初心スレ861(481)2007/05/25(金) 22:03:25ID:1LPPhSSe
質問です

if(a=1){
if(b=1){
print "○○○"
}
}
というようにIFの中でIFは可能ですか?
0128nobodyさん2007/05/25(金) 22:17:31ID:???
歴史にIFなど無いのだよ
0129nobodyさん2007/05/25(金) 23:10:03ID:???
>>127
なぜ不可能だと思うんですか?
0130nobodyさん2007/05/25(金) 23:29:35ID:???
>>129
うごいていたプログラムのIFの中にIF入れたら壊れたからです
何か他にげんいんがあるのかお
0131nobodyさん2007/05/25(金) 23:47:26ID:???
お前のプログラム知識だよ
0132nobodyさん2007/05/26(土) 05:47:48ID:???
if(a=1)

なんか懐かしいなw
こういうの見たの15年ぶりだよ。
0133nobodyさん2007/05/26(土) 23:39:33ID:???
perl 関連スレッドに機会があったらいつか書こうと思って
たんだが、機会が無いのでここに独り言として書く。

[初心者のための perldoc ]
perldoc は、本を開かなくともいつでも開くことが出来る手軽なリファレンスだ。

ターミナルで「perldoc perl」と打ち込むだけで概要が出てくる。SYNOPSIS に
リストがつらつら書かれているがそれぞれ perldoc で呼び出すことができる
1. とりあえず基礎の基礎を読んでみたいなら「perldoc perlintro」
 ( for, while, if などもここを最初に )
 array of array などなら「perldoc perllol」
 正規表現なら、「perldoc perlre」
 スイッチ(所謂コマンドラインオプション)なら「perldoc perlrun」
 etc...
 これらの文章中 see perlxxxx.... と書かれていたら素直に
 「perldoc perlxxxx」すればよい。
2. 個々の関数について調べたいなら
 「perldoc -f reverse」
 などと f オプションを付けて実行する。
3. 取り敢えず、なんか判らんって時。例えば「配列」
 「perldoc -q array」
 faq の中から array を含む文章拾ってくれる。但し question のみ。
4. 個々の説明文 pod にアクセスしたい時
 「perldoc Tie::File」
 「perldoc strict」
5. 「perldoc -h」すれば、perldoc の使い方の説明が出てくる。
perldoc の中身には例文も出てくるので、英語が判らんでも 2ch に
相談するまえに見てみることをお勧めする。
どーしても、という方には web 上にはそれなりに翻訳された perldoc が
あるのでターミナルで「perldoc perl」でリストの中から目星を付け、
そのファイル名で検索するのも良い。
(但し最新版ではない事がほとんどなので注意が必要)
0134nobodyさん2007/05/29(火) 00:59:04ID:+KVPsKMz
質問です。

#!/usr/bin/perl

open (IN,"< http://あqwせdrftgyふじこ/test.dat") ;
@LINES = <IN>;
close(IN);

print "Content-type: text/html\n\n";
print "<html><head></head><body>";

foreach(@LINES){
 print $_ . "\n";
}
 print "</body></html>";
}

こんな感じでhttpから始まるURLをうって
ファイルを開いて処理したいんですがどうやら読めないっぽいです。

open (IN,"test.dat") ;
に変えると動いてくれるのですが、、、

仕様上不可能なんでしょうか?
0135nobodyさん2007/05/29(火) 01:19:04ID:???
>>134
allow_url_fopen が効いてる PHP みたいな、裏でどうにかしてくれる仕掛けはありません。
LWP使えば外部のファイル自体は取得できるけど。
0136nobodyさん2007/05/29(火) 02:04:54ID:+KVPsKMz
>>135
こんな時間にレスあり ><

use LWP::Simple;
$a = get("http://くぁwせdrfgyふじこ/test.dat");

で取得できました。ありがとうございました。

これで気持ちよく眠れます。
0137nobodyさん2007/06/03(日) 00:26:01ID:???
久しぶりにperlでcgi作ろうかと思うんだけど、今はutf8で書くのが一般意的?
0138nobodyさん2007/06/03(日) 13:53:14ID:???
なんでもおk
0139nobodyさん2007/06/05(火) 13:52:29ID:???
ブラウザで操作をして
自サーバ内のファイルを別サーバへコピーしたいんですが(セキュアFTPサーバ)
Net::FTP
を使って、セキュアなFTPサーバへ接続は出来ますか?
もしくは、可能な別モジュールってありますか?
0140nobodyさん2007/06/07(木) 14:40:32ID:TOlQmlY8
すいません。
定期的にフォーム部品の個数が変わるフォームで、
1コでも未記入があった場合にエラーが出したいんです。

radio1
radio2
radio3
textarea1
textarea2
radio4
・
・
・
その時によって、フォーム部品の数が増えたり減ったりします。
汎用的に未記入があった時にエラーを返すにはどうしたらいいでしょう?
0141nobodyさん2007/06/07(木) 15:58:44ID:???
フォームにフィールド一覧をhiddenで入れておくとか
0142nobodyさん2007/06/07(木) 16:38:40ID:???
それはだめだろw
0143nobodyさん2007/06/07(木) 17:31:11ID:???
エンティティボディに=&か=$があったら落とせばいい
0144nobodyさん2007/06/07(木) 17:33:24ID:???
それでは駄目

仕様上は未入力のフィールドは送信しなくてもいいことになってるんで
0145nobodyさん2007/06/07(木) 17:51:47ID:???
そんな細やかなもんなら全部やるしか無いでしょ
どのみちレングスや内容を全部調べるんだろうし
0146nobodyさん2007/06/08(金) 11:15:29ID:???
>>144
inputがあるのに未入力を検出したいってんなら>>143で問題ないと思うのだが。

>仕様上は未入力のフィールドは送信しなくてもいいことになってるんで
って何の仕様の話?
■ このスレッドは過去ログ倉庫に格納されています