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

Perlコーディング初心者質問スレ Part 41

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/03/10 00:47:16ID:sT66OcmD
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0331nobodyさん皇紀2665/04/01(金) 14:44:13ID:XdlrhN9n
perlで一般的なハンガリー記法ってありますか?
0332nobodyさん皇紀2665/04/01(金) 14:52:50ID:???
>>331
そんな記法のことはきれいさっぱり忘れてくダサい。
0333328皇紀2665/04/01(金) 15:34:10ID:???
>>330
途中で書き込んだ為、誤って2スレ分になってしまいました。
語尾によって気分を害されたのであれば申し訳御座いません。
また御機会があれば宜しくお願い致します。
0334nobodyさん皇紀2665/04/01(金) 15:39:55ID:???
>>333
>>330の語尾をよく見tr
0335nobodyさん皇紀2665/04/01(金) 15:58:02ID:???
>>329
tr/-//
0336nobodyさん皇紀2665/04/01(金) 18:00:41ID:???
>>328-329
$_ = $hoge; # ←する理由がわからん
(ふつう $_ に意識的に代入するかなぁ…?)

$count ++ while ($hoge =~ m/-/g);
とかも可能
0337nobodyさん皇紀2665/04/01(金) 19:13:27ID:???
>>336
おそらく if (($hoge =~ s/-/-/g) > 10) と書けるとは知らなかったと思われ。
0338326皇紀2665/04/01(金) 21:21:39ID:???
>>327
うお、マジすか。

DBIが似たような仕組みらしいので、ちょいと中をのぞいてみても、
どのへんでこの問題を解決しているのかサッパリです。
ソースのどの辺りで解決しているのかおわかりの方はいませんか?
0339nobodyさん皇紀2665/04/01(金) 22:48:38ID:ybs/IKbS
>>338
DBIが読み込むドライバのことを言っているのかな。
どうせuseかrequireかdoを使ってるんだろうと
あたりをつけてサーチかませばDBI.pmのサブルーチン
install_driverの中でreqireしてごにょごにょしてる
ところはすぐ見つかると思われる。

ただドライバはDBI::DBDに説明されているような構成
になってることを要求されていて一般的なモジュール
とはちといえないから、参考になるかどうかはびみょー。

0340328皇紀2665/04/01(金) 22:53:02ID:???
>>335-337
ありがとです。度忘れしてました。
tr/-//採用させていただきます。

use Benchmark;
$hoge = "あいうえお-かきくけこ-さしすせそ-たちつてと-なにぬねの-はひふへほ";
timethese(100000, {
sample1 => sub { if(($hoge =~ tr/-//) > 10){} },
sample2 => sub { if(($hoge =~ s/-/-/g) > 10){} },
});
Benchmark: timing 100000 iterations of sample1, sample2...
sample1: 0 wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU) @ 2127659.57/s (n=100000)
sample2: 0 wallclock secs ( 0.22 usr + 0.00 sys = 0.22 CPU) @ 456621.00/s (n=100000)
0341nobodyさん皇紀2665/04/02(土) 00:17:03ID:m1Urw5SA
■言いたい放題FC東京 310■
http://ex9.2ch.net/test/read.cgi/soccer/1112223516/

瓦斯スレ突破ゲーム
瓦斯サポの突破力をみんなで身につけよう!!
※瓦斯スレにメール欄「小鹿」本文「お疲れ様でーす」と書き込む
※5分間書き込みがなかったら「突破成功」と再書き込みで成立
※なんらしかレスがあったら失敗 
※「フロント」か「朝日」の書き込みがあったら
シーチケ取り上げられるだけで済みます。
0342326皇紀2665/04/02(土) 02:28:50ID:???
>>339
仰せの通り、該当部を覗いてみると、
requireでドライバを読み込んで、
読み込まれたドライバはDynaloaderをuseして、
bootstrapで自分自身をロードしているらしい
……具体的にはワケワカメなのですが。

詰まるところ、これが動的なインポートというやつなのでしょうか?
まんまパクってやれば、いちいち「読み込まれる可能性のある(以下略」を書かなくても良いのかなぁ。
0343nobodyさん2005/04/02(土) 13:44:50ID:BYWwUZK5
プロキシでのアクセスを制限したいです。
環境変数の取得の仕方は分かります。
プロキシかどうかを判定すにはどうすれば良いのでしょうか?
0344nobodyさん2005/04/02(土) 14:12:01ID:???
簡易的な方法でいいの?
0345nobodyさん2005/04/02(土) 14:25:00ID:BYWwUZK5
レスありがとうございます。
個人的には、できるだけ強力な制限にしたいのですが、
面倒くさいようでしたら、さわりだけでも教えて頂けると助かります。
ぐぐったんですけど、検索の仕方悪いのかサーバがどうのこうのってのばっかりで…。
03463282005/04/02(土) 14:33:36ID:???
>>343
ポートの80と8080番空いてるか調べるとか。
0347nobodyさん2005/04/02(土) 14:38:36ID:???
>>343
ttp://sv2ch.baila6.jp/chk_proxy.cgi
0348nobodyさん2005/04/02(土) 14:40:29ID:BYWwUZK5
勉強不足ですみません。ポート開いてるかを見る環境変数もあったんですかぁ…。
つまり、プロキシ鯖は80、8080は大抵空いているものなのですか?
0349nobodyさん2005/04/02(土) 14:46:46ID:BYWwUZK5
ポート番号: 80 結果:接続できますた。(^o^)

…ルータで弾いてるはずなのに。やばいっすかね?
0350nobodyさん2005/04/02(土) 15:58:19ID:???
use IO::Socket;

$host = 'www.2ch.net'; #IPとかホスト名
$port = 80; #ポート番号

$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => 'tcp');

if($socket){ print 'ポート空いてるお^^'; }
else{ print '空いてないお^^'; }
0351nobodyさん2005/04/02(土) 17:11:41ID:???
>>347にあるけど2chのBBQ使って正引きするのがイイと思う
03523432005/04/02(土) 17:18:11ID:jF3LdyJO
御協力感謝です。
でも、初心者の僕には頭が混乱してくる話で…w
皆さんの御厚意を無駄にしないよう、ぐぐりまくって勉強します。
最後に、クレクレで申し訳ないんですが、良い勉強サイトあったら紹介して頂けますでしょうか。

皆さんのように教えられる立場になれるようがんばります。ありがとうございました。
0353nobodyさん2005/04/02(土) 17:46:33ID:???
それもググりまくってください。
03543432005/04/02(土) 19:10:20ID:jF3LdyJO
がんばって、ぐぐるとです。
ところで、
sub checkProxyList
{
my $RADDR = $ENV{'REMOTE_ADDR'};

$RADDR =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $query_addr = "$4.$3.$2.$1.niku.2ch.net";
my $addr = join('.', unpack('C*', gethostbyname($query_addr)));
if ($addr eq '127.0.0.2')
{
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}
return 0;
}
って、勝手に使って良いんですか?
0355nobodyさん2005/04/02(土) 21:39:07ID:???
>>354
私的利用なら問題ないでしょ。多分。俺は詳しくないからわからんけど。
でも俺なら

my $req = join(".", reverse(split(/\./, $ADDR))) . ".niku.2ch.net";
my $res = join(".", unpack("C*", gethostbyname($req)));
DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)") if ($res eq '127.0.0.2');

とか、

if(join(".", unpack("C*", gethostbyname(join(".", reverse(split(/\./, $ADDR))) . ".niku.2ch.net"))) eq '127.0.0.2'){
    DispError("ERROR!","公開PROXYからの投稿は受け付けていません!!(1)");
}

みたいに書くよ!
0356nobodyさん2005/04/03(日) 00:25:49ID:???
確か特定のIPからしかリクエスト利かなかったような覚えが・・・
0357nobodyさん2005/04/03(日) 01:52:06ID:???
サブルーチンのリファレンスを作るのに、引数も一緒に渡そうとしています。
例えばサブルーチンcodeのリファレンスを作るとき
sub { &code('a','b') }とすると見栄え的にあまりよくないと思うので、
\&code('a','b') や \{&code('a','b')} としてみたらエラーとなりました。
何かうまい方法は無いのでしょうか。例えば次の単純なプログラムを実行したら
Not a CODE referenceと表示されます。

$ref = \&hoho(1,\&huhu('a','b'));
&$ref;
sub hoho {
&{$_[1]};
}
sub huhu {
print $_[0].$_[1];
}
0358nobodyさん2005/04/03(日) 06:33:05ID:???
>>357
そろそろオブジェクト指向にシフトする頃合かも。
あえてクロージャで書いてみる。
$ref = create_hoho(1, create_huhu('a', 'b'));
$ref->();

sub create_hoho {
my ($dummy_arg, $sub_ref) = @_;
return sub { $sub_ref->(); }
}

sub create_huhu {
my @args = @_;
return sub { print $args[0].$args[1]; }
}
0359nobodyさん2005/04/03(日) 08:50:06ID:???
>>358
それはうまくいきますね。
オブジェクト指向ですか、勉強してみようと思います。
ありがとうございました。
0360nobodyさん2005/04/03(日) 10:02:18ID:???
while(readdir(DIR)){
    # 処理
    # のようなのは不可能なのですか?
    # この中でディレクトリの内容を $_ に読み込んで処理したいのですが、
    # 直前に処理されていた $_ の値が入ってしまいます。
}

よろしくお願いします。
0361nobodyさん2005/04/03(日) 10:54:05ID:???
while($_ = readdir(DIR)){
}
0362nobodyさん2005/04/03(日) 11:17:18ID:???
for (readdir(DIR)){
}
03633432005/04/03(日) 12:13:17ID:2xmdAJbj
>>355
豚クスです
03643602005/04/03(日) 17:40:14ID:???
でもファイルをopenして
while(<FH>){
}
ならできるのにどうしてですか?
0365nobodyさん2005/04/03(日) 19:23:25ID:???
すいません、ウィンドウズのローカル(activeperl)で動いてるperlスクリプトから
掲示板(2chではないです)に書き込みたいんですが、
何か参考になるサイトなどありましたらお教え願えないでしょうか。
該当掲示板のアドレスにパラメーターくっつけて送信したらいいだけってのはわかるんですが、
そこに至るまでの過程がわからなくて…。
何か良いサンプルプログラムとかありましたら何とぞよろしくお願いします。
0366nobodyさん2005/04/03(日) 19:33:25ID:???
>>364
while(<FH>) のときだけ特別にそう動くようになってるんだよ。
ちゃんとした本を読むのだ。書いてあるから。
0367nobodyさん2005/04/03(日) 20:29:18ID:???
>>365
age2chで検索汁。
0368nobodyさん2005/04/03(日) 21:57:56ID:???
>>365
http://homepage3.nifty.com/hippo2000/perltips/lwpcook.html#POST
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
0369nobodyさん2005/04/04(月) 17:27:56ID:soRFZIJA
過 疎 過 ぎ で す よ!
0370nobodyさん2005/04/04(月) 20:50:32ID:???
荒らされて3日で1000逝くよかマシ
0371nobodyさん2005/04/05(火) 13:02:19ID:ZNntFGGU
Perlのフォームの入力確認の部分で
フォーム内容A=フォーム内容B
でなければエラー

という簡単な方法があれば教えて頂けないでしょうか?
0372nobodyさん2005/04/05(火) 13:37:44ID:???
↓ エスパー降臨
0373nobodyさん2005/04/05(火) 13:52:34ID:???
Perlで画像アップロードCGIを組んでいるのですが、サムネールを自動育成できればと思っているのですが
HTMLで擬似縮小するのではなく本当に画像を指定サイズに縮小する方法はありませんか
0374nobodyさん2005/04/05(火) 13:58:23ID:???
画像を切り取れ
0375nobodyさん2005/04/05(火) 14:06:31ID:???
>>373
参考にしる
ttp://sugachan.dip.jp/download/joyful.php
0376nobodyさん2005/04/05(火) 14:13:05ID:CfOSbO/O
>>373
育成?
0377nobodyさん2005/04/05(火) 14:58:14ID:???
>>373はエロゲーのやりすぎ
0378nobodyさん2005/04/05(火) 15:19:12ID:???
373です
出来ました。
ありがとうございました。
0379nobodyさん2005/04/05(火) 15:20:31ID:???
>>377
反発するつもりじゃないけどエロゲー未経験
むしろ買う勇気が(ry
0380nobodyさん2005/04/05(火) 15:56:03ID:???
>>379
小心者は黙ってネット通販
0381nobodyさん2005/04/05(火) 16:21:48ID:ZNntFGGU
ここに誘導されて来たんですけど、

Perlのフォームの入力確認の部分で
フォーム内容A=フォーム内容B
でなければエラー

という簡単な記述があれば教えて頂けないでしょうか?
0382nobodyさん2005/04/05(火) 16:26:07ID:???
('A`)
0383nobodyさん2005/04/05(火) 16:37:20ID:???
釣られてみる
%FORMにクエリーが入ってるとして
if($FORM{'formA'} ne $FORM{'formB'}){&error(エラールーチンとか);}


初歩的にも度が過ぎる・・・
0384nobodyさん2005/04/05(火) 18:08:15ID:ZNntFGGU
>>383
やっぱりうまくいきません。

フォーム1の名前:password1  タイプ:password
フォーム2の名前:password2  タイプ:password
if ($password{'password1'} ne $password{'password2'}) { &error('エラーです。'); }

他に何か加えないといけないでしょうか?
問題点があったら、よろしくお願いします。
0385nobodyさん2005/04/05(火) 18:14:00ID:???
%passwordに何も入ってないというオチ
0386nobodyさん2005/04/05(火) 18:17:26ID:ZNntFGGU
%password にクエリーを入れるという意味がわからないのですが・・・
よろしくお願いします。
0387nobodyさん2005/04/05(火) 18:23:15ID:???
>>383 の想像をはるかに超えた初歩的度。
0388nobodyさん2005/04/05(火) 18:27:50ID:ZNntFGGU
わからないです。
どこがわるいんでしょうか?
0389nobodyさん2005/04/05(火) 18:31:59ID:ZNntFGGU
ヤフー検索。
クエリーを入れる→7件

my $q; #クエリーを入れる
my $method; #メソッドを入れる

↑はクエリーですか?
0390nobodyさん2005/04/05(火) 18:34:50ID:???
>>388
%passwordに渡した内容が自動的に入ると思ってる?
思ってんならそれ間違いだから。中身は空だから。
0391nobodyさん2005/04/05(火) 18:37:46ID:ZNntFGGU
直して付け加えたのはここの部分だけです。

フォーム1の名前:password1  タイプ:password
フォーム2の名前:password2  タイプ:password
if ($password{'password1'} ne $password{'password2'}) { &error('エラーです。'); }

でやっても、上の入力は無視されて飛ばされてるみたいで、
一緒でなくてもそのまま送信されてしまいます。上級者の方、よろしくお願いします。
0392nobodyさん2005/04/05(火) 18:39:32ID:ZNntFGGU
>>390
要するにどこをどのように直せばよろしいのでしょうか?
0393nobodyさん2005/04/05(火) 19:07:40ID:???
>ヒントではなく、
>このように直せば動く、このように付け加えれば動く、
>という指摘がうれしいのですが・・・。
>初心者ではなく言語がわからない人です。

こいつWeb制作板でこんなこと書いとる
0394nobodyさん2005/04/05(火) 19:28:53ID:ZNntFGGU
$a=newpass;
$b=newpass2;

if (!$namecheck && $name eq '') { &error('名前を入力してね。',''); }
if ($a==$b eq '') { &error('パスワードエラーです。',''); }

このようにifがいろいろ並んでいるのですが、
それに1行加えてみましたが、見事にエラーになりました。
よろしくお願いします。
0395nobodyさん2005/04/05(火) 19:33:04ID:???
エラーログを読みましょう。
0396nobodyさん2005/04/05(火) 19:59:42ID:ZNntFGGU
$a="passward1";
$b="passward2";

if (!$namecheck && $name eq '') { &error('名前を入力してね。',''); }
if ($a ne $b) { &error('パスワードエラーです。',''); }

にしたら、「パスワードエラー」が表示されるようになりました。
しかし、A=BでもA=Bでなくても、エラーになってしまいます。

「パスワードエラー」までいくようになったので、あとはAとBの置き換えの問題だと思うのですが、
この記述は上の方に書いたのですが、フォーム上の
name="passward1"
を
$a="passward1"
と置き換えていいのでしょうか?
0397nobodyさん2005/04/05(火) 20:25:29ID:???
ま、どうでもいいけど、passward は password って書いたほうがいいと思うけどな。

どうでもいいんだけどな。
0398nobodyさん2005/04/05(火) 20:32:11ID:???
%form にクエリーを入れて返す関数

sub get_form {
my %form;
seek(STDIN,0,0);
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach(split(/&/)){
my($name, $value) = split(/=/);
$value =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/eg;
$form{$name} = $value;
}
return %form;
}
0399nobodyさん2005/04/05(火) 20:46:00ID:???
そろそろ釣りと気づけよ。
0400nobodyさん2005/04/05(火) 20:57:55ID:???
⊂二二二( ^ω^)二⊃ ブーン
0401nobodyさん2005/04/05(火) 21:22:59ID:???
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_decode_a_CGI_form_
> CGIフォームをデコードするには?
> 標準のモジュール、多分CGI.pmを使うとよいでしょう。あなたが手作業で行うことは多分ありません!

使い方はこの辺りとか。
ttp://www.futomi.com/lecture/form/cgi-pm.html
0402nobodyさん2005/04/05(火) 21:57:40ID:ZNntFGGU
sub get_form {
my %form;
seek(STDIN,0,0);
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach(split(/&/)){
my($name, $value) = split(/=/);
$value =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/eg;
$form{$name} = $value;
}
return %form;
}

をデコード処理というところに貼ってみましたが、だめでした。
いろいろありがとうございました。
0403nobodyさん2005/04/05(火) 22:31:15ID:???
すいません、perlでテキストファイルを自分のサイトのアップローダ(php)に上げようとして
http://bird.dip.jp/computing/zive.html
ここを参考にしてみたんですがうまくアップロード出来ません。一応アクセスは出来てるようですが…。
もしかしてperlでアップロードする時は該当ファイルのパスが変わるのかなと思ったり。
以下に「全ソース」を貼らせてもらいます…。
アップロードしたいファイルはC:\Perl\test.txtの位置、このスクリプトを置いてる位置はC:\(直下)にあります。
どなたかアドバイスよろしくお願いします…。

# アップロード用

use constant URI => 'http://hoge.net';
use strict;
use LWP::UserAgent;

# POST parameters
my @param = ('hoge=1',
'MAX_FILE_SIZE=500000',
'uploadfile=C:\Perl\test.txt');

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => URI);
$req->content_type('application/x-www-form-urlencoded');
$req->content(join('&', @param));
my $res = $ua->request($req);

open(OUT, ">> ./hoge.txt");
binmode(OUT);
print OUT $res->as_string;
close(OUT);
exit 0;

結果はアップロード拒否用のページのソースが出力…。
0404nobodyさん2005/04/05(火) 23:10:32ID:???
>>403
http://hoge.net はアップローダじゃないようだが?
04054032005/04/05(火) 23:20:45ID:???
>>404
一応、http://hoge.net/index.phpにしてみましたが駄目でした…。
0406nobodyさん2005/04/05(火) 23:31:49ID:???
>>405
http://hoge.net/index.php も存在しないようだが?
0407nobodyさん2005/04/06(水) 07:29:51ID:???
>>403
ファイルアップの場合のcontent-typeは普通multipart/formdata
CGI側でチェックしてないことが多いのでフォームパースはやってくれるかもしれないがPOSTの内容はmultipart/formdataの仕様に合わせないとだめ。
0408nobodyさん2005/04/06(水) 08:36:24ID:???
multipart/form-dataでした
詳細はrfc2388
0409nobodyさん2005/04/06(水) 18:15:00ID:cBYix7o3
.htaccessが使えない環境なのですが、
POST以外のデータ受け取りを拒否する方法ってありますか?
0410nobodyさん2005/04/06(水) 18:26:17ID:???
$ENV{'REQUEST_METHOD'}
0411nobodyさん2005/04/06(水) 18:54:05ID:cBYix7o3
ありがとうございます。
0412nobodyさん2005/04/06(水) 18:59:03ID:0ohpKdgA
こまっています。

postgresql8.0
windowsXP
perl5.008
DBD::PgPP
の環境にて、perlからpostgresにデータインサートをおこなっているのですが、
DBIのトランザクションがなかなか理解できません。
使いかた、文法間違っていないかご教授お願いします。

$dbh= DBI->connect($DBname, $DBuser, $DBpass);
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;

eval {
#テーブル1にinsert
$SQL= "INSERT 〜";
$sth= $dbh->prepare($SQL);
$sth ->execute();
     #テーブル2にinsert
$SQL= "INSERT 〜";
$sth= $dbh->prepare($SQL);
$sth ->execute();
$dbh->commit;
};
if ($@) {
$dbh->rollback;
}
$sth->finish();
$dbh->disconnect();
0413nobodyさん2005/04/06(水) 21:11:07ID:cBYix7o3
質問よろしくお願いします。
掲示板を作っているのですが、reverseを使わずに、
ログファイルの先頭に書き加えるにはどうしたらいいでしょうか?
なるべくリソースを使わないようにしたいです。

また、意中のレスを削除するために、
ログファイルから、その行だけを取得する方法はありますでしょうか?

よろしくお願いします。
0414nobodyさん2005/04/06(水) 21:41:05ID:???
>>407
>>408
色々と探した結果ここのページ参考にして

修正してみたんですが、どうもうまく動きません…。
一応アップロード用のphpファイルと接続出来ているようですが、
やはりフォームデータが正常に送信出来てないようです。
とりあえずアップロード用のモードでサーバーのphpが結果を出力してるので、
全てのフォームデータが送信されてないわけではないと思うんですが。
うーん。

use HTTP::Request::Common;
use strict;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;

my $res = $ua->request(POST 'http://yomogiwakakusa.jog.buttobi.net/index.php',
Content_Type => 'form-data',
Content => [ upload=> '1',
MAX_FILE_SIZE => '500000',
userfile => "test.txt" #アップロード用ファイル、plスクリプトと同階層
]);

print $res->as_string;
open(OUT, ">> ./result.txt");
binmode(OUT);
print OUT $res->as_string;
close(OUT);
exit 0;
0415nobodyさん2005/04/06(水) 22:18:05ID:???
>>414
phpが期待する入力と合ってないだけでしょ。
0416nobodyさん2005/04/06(水) 22:33:49ID:???
>>413
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq5.html#How_do_I_change_one_line_in_a_fi

>>414
use LWP::Debug qw(+);
0417nobodyさん2005/04/06(水) 23:15:15ID:???
>>415
>>416
ありがとうございます。
アップロード用のphpの方をいじってファイル名がどういう風に送信されてるか表示させてみました。
で、同じようにこのコードで実行してみると、

my $userfile='C:\test.txt';
my $res = $ua->request(POST 'http://hoge.net/index.php',
Content_Type => 'form-data',
Content => [ upload_log => '1',
MAX_FILE_SIZE => '500000',
userfile => $userfile
]);

php側じゃ$userfileの値が「C:\\test.txt」と円マーク二つ返してきてます…。
これじゃアップロード出来ないですよね。

一応こちらのperlの方を「C:\\test.txt」と変更して実行すると、
返り値は同じ「C:\\test.txt」、
ヤケクソになって「C:\\\test.txt」と円マーク三つつけて実行すると、
「C:\\\\test.txt」と四つになって返ってきます。
perlってこんな仕様だったかな…。

すいません、そろそろ大詰めっぽいのでどなたか良きアドバイスを…。
0418nobodyさん2005/04/06(水) 23:20:19ID:jUkFe3D6
共用鯖で全てのPHP RUBYスクリプトが使えなくなるプログラムを作ってください
0419nobodyさん2005/04/06(水) 23:26:41ID:???
$userfile='C:/test.txt';
0420nobodyさん2005/04/06(水) 23:43:37ID:???
>>417
ファイル名だけ来てファイルの内容が来てないということ??
04214142005/04/06(水) 23:45:15ID:???
>>419
ああ、そんな簡単なことでよかったのか…、
ということでやってみましたが確かにファイル名はそのまま送信できましたけど、
結局アップロードは出来ず。
なぜだ…。

とりあえず>>416さんに教えてもらったコードでデバグしてみるとこんな感じでした。

LWP::UserAgent::new: ()
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: POST http://hoge.net/index.php
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 860 bytes
LWP::Protocol::collect: read 1852 bytes
LWP::UserAgent::request: Simple response: OK

0422nobodyさん2005/04/06(水) 23:49:36ID:???
>>420
えと、ご存じかも知れませんがphpじゃアップロードされたファイルはこんな↓感じの形式で
サイズとかいろいろなデータを取得できるんですが、
$_FILES['userfile']['name']
$_FILES['userfile']['tmp_name']

中身がからっぽなのでとりあえず
$userfile= $_REQUEST['userfile'];
とただの変数扱い?にしてperlから送信されてくるファイル名を調べてみたんです。
04234142005/04/07(木) 00:14:05ID:???
とりあえず参考にしたページを上げ忘れていたので補足。これの下の方です。
http://homepage3.nifty.com/hippo2000/perltips/HTTP/Request/Common.html

> これはおおむね以下のようなHTTP::Requestオブジェクトを作成します
> (バウンダリと~/.profileは違っていることでしょう):

ここがちょっと意味がわからない…。
0424nobodyさん2005/04/07(木) 01:10:34ID:???
>>412
普通、テーブル2へのinsertでエラーが発生したらrollbackさせる。

>>414
|Content-Type: multipart/form-data; boundary="6G+f"
や
| PATH=/local/perl/bin:$PATH
| export PATH
はそのとおりではないだろうという事。
0425nobodyさん2005/04/07(木) 01:32:34ID:hZmAmpQN
配列を返す関数をダブルクォートの中で展開するにはどうしたら良いのでしょうか?
$, = '+'とした後、keys(%expect)をダブルクォートの中で配列として評価し展開したいんです。。
色々と試してみたのですが、結局やり方が分からなかったのでどなたか教えて頂けると嬉しいです。
0426nobodyさん2005/04/07(木) 01:35:16ID:???
>>425
意味わかんねえよ。もうちっと具体的に。
04274142005/04/07(木) 01:42:28ID:???
>>424
ああ、そういうことですか、なるほど…。

ひとつ気になった点。
普通にブラウザのフォームから「アップロードファイルの参照は空欄のままにして」submitした場合、
送信しようとしたアップロードファイルのデータをphpの側が

[userfile] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

と出力するんですが、
ローカルのperlからデータ送信した場合なぜか
Array
(
)
と、根本的に何もかも空っぽになってしまいます。
これは何か怪しい…かな。
0428nobodyさん2005/04/07(木) 01:43:18ID:???
>>426
すいません。。返信ありがとうございます。
%expectにはいくつかのデータが入っていて、そのキーだけを取り出し+で繋げて$outに代入したいんです。
なので、
$, = '+';
my @tmp = keys(%expect);
$out = "@tmp";
とすれば出来るんですが、わざわざ@tmpを作るのが汚いので@tmpを作らずにこれが出来る方法を質問させて頂いた次第です。
0429nobodyさん2005/04/07(木) 02:12:32ID:mpm+fGDU
for(keys %expect){ $out .= $_."+";}
04304282005/04/07(木) 02:24:45ID:???
>>429
返信ありがとうございます。それも試したんですが、一番最後に+が付いてしまうので。。
■ このスレッドは過去ログ倉庫に格納されています