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

【Perl】初心者コーナー Part18

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん02/11/20 22:04ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0809nobodyさん03/01/02 00:35ID:???
>>808
すまんが同意。

Cのポインタは極めたぜ!とか自負してるレベルでは全然倒せないっす。。。
0810nobodyさん03/01/02 01:58ID:???
>>809
char **a[10][20]へのポインタを宣言してみてください
0811カミ03/01/02 03:38ID:???

例えば
$aaa = "aaa";
print ${aaa} ;#aaaが表示

このように変数名そのものは$と言う連想配列の要素らしい事がわかる
0812nobodyさん03/01/02 23:36ID:L6yfXpSS
>>811
それはちょっと無理が・・

その書き方は、単純に、変数名の区切りをはっきりとさせる。というだけだね。
$aaa = "hogehoge";
print "test:$aaabbbccc"; #test:だけ表示
print "test:${aaa}bbbccc"; #test:hogehogebbbccc
0813nobodyさん03/01/02 23:54ID:L6yfXpSS
>>808
わかりにくい部分は、、コンマ演算子の所かな。違うか。

$a = ('a', 'b', 'c'); #$aにはcが入る
$a = 'a', 'b', 'c'; #これは上の普通の書き方。$aにはcが入る
@a = ('a', 'b', 'c');
$a = @a; #これは$aには3が入る
0814yani ◆saNSktNEdQ 03/01/03 00:28ID:0E5Ge7qR
コンマ演算子の働きと言うよりは、list constructor では
と言ったほうがいいかも知れない。
qw(...)でも同じように働くから。
しかし本当のところはPerlのソースコードを読まないと分からないのかも知れない。
内部的にコンマ演算子使ってるかもしれないし。

0815nobodyさん03/01/03 00:57ID:???
>>813
コンマ演算子は代入演算子より優先順位が低い。

$a = 'a', 'b', 'c'; # これはaが入る
@a = 'a', $b = 'b', 'c'; # これは @a = ('a'); $b = 'b'; 'c' と同じ
081681303/01/03 01:13ID:nupLg+Ov
うー知らんかった。単純に。優先順位についてもっと勉強するか・・
0817nobodyさん03/01/03 01:14ID:???
>>816
()で囲めば解決。
0818カミ03/01/03 16:20ID:???
>>812氏、確かにその解釈が正解の様です。
しかし、ちと違うが下の様な実験結果もしてみた。
$hash{array} = [ 1,2,3 ];
$s = scalar $hash{array} ;
if ($s =~/^ARRAY/ ) {
print "scalar :$s\n" ;
for (@{$s}) {
print $_."\n" ;
}
}
1;
これを実行
scalar :ARRAY(0x183f04c)
1
2
3

この場合 @と言う連想配列の要素にARRAY(0x183f04c)が有る様に思える。
0819nobodyさん03/01/03 17:36ID:???
>>813
何が言いたいのかわからんのだが…。
@{$s} == @$s == ただのデリファレンス
じゃないのか?
082081903/01/03 17:37ID:???
間違い、>>813じゃなくて>>818。
0821nobodyさん03/01/03 21:46ID:nupLg+Ov
>>818
そんな難しいことしなくても、Data::Dumperを使うとざざーっと出してくれる

>>811でも変なこと言ってるけど、名前の部分が空っぽの記号だけの変数なんて存在しない。
>>812を読めばわかるじゃろ。
0822nobodyさん03/01/03 22:38ID:???
>>811の理屈は面白いw
0823nobodyさん03/01/03 22:57ID:???
どうやって実装しているかが分かれば…
0824yani ◆saNSktNEdQ 03/01/04 00:02ID:8PdubkBh
参考になるかどうか知らないが、%::っていうのがある。
0825yani ◆saNSktNEdQ 03/01/04 00:03ID:8PdubkBh
まあ、::が入ってるから、関係ないかな。
0826カミ03/01/04 00:38ID:???
>>819-822 単なる参照外しした結果だった様ですね。
先の実験で私が感動したのは
$s = scalar $hash{array} ;して if ($s =~/^ARRAY/ ) {が真になる。

$sにはARRAY(XXXXX)というキーとなる値が入り
@{$s}にて@なる連想配列(配列の親玉の様な)から配列を参照できる。
この様に思えるコードが実行されたところです。

もちっと http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html を勉強します。

PS
 無名関数ってラムダですよね?
0827カミ03/01/04 16:41ID:???
>>824 氏
その%::ってどう使うのですか?想像つきません。
0828nobodyさん03/01/04 17:29ID:???
>>826
>$s = scalar $hash{array}

で$sにARRAY〜が入っているのは
scalarがリファレンスを返したりもするのですね。

>@{$s}にて@なる連想配列(配列の親玉の様な)から配列を参照できる。

@なる連想配列云々は普段使用している参照となにも変わらないような・・・

$s = \$hash{array};
for each (@$s) { etc... }

リファレンスが入っているのなら
@{$s} は @$sそのものですし。。
0829nobodyさん03/01/04 18:11ID:???
>で$sにARRAY〜が入っているのは
で$sにARRAY〜が入っているのね。
の間違いです。ごめん。。

scalar がリファレンスを返したのは
= [1, 2, 3];
で定数配列? を代入させたからですか・・・

納得。
0830nobodyさん03/01/04 18:51ID:???
>>829

my $a = ['aho'];
print $$a[0];
$$a[0] = 'baka';
print $$a[0];

って代入もできるから定数ではないYO
\[etc...]
で定数配列になる

この変数はアドレスだけで、特に名前は存在しないから
無名変数と言えなくもない

変数名はただのメモリアドレス識別子ともいえるから
特に強調することではないYO
0831nobodyさん03/01/04 19:08ID:???
質問です。 $urlで指定したファイルを取得するプログラムを作ったのですが、正しいURLを入力していても404 Not Found等を返す事があり困っています。
404 Not Foundを返すファイルへの対処方法を教えてください。

正常 http://www.yahoo.com/index.html ダメ :http://www.google.co.jp/index.html

$url="http://www.yahoo.com/index.html";
$url =~ s/http\:\/\///g;
@list = split('/',$url);
$host = shift(@list);
$file = pop(@list);
push(@list,$file);
$path = join('/',@list);
$addr = (gethostbyname($host))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
@data;
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "GET /".$path." HTTP/1.0\r\n\r\n";
while (<S>) { push(@data,$_); }
close(S);

$delnum = 1;
foreach(@data){ $delnum++; if(/Content-Type:/){ last; } }
splice (@data,0,$delnum);
open OUT,">$file";
binmode OUT;
foreach $var(@data){ print OUT$var; }
close OUT;
0832nobodyさん03/01/04 19:49ID:???
>>831
わざわざsocketを使っているのって凄いでつね。
どんな環境(OSなど)かは判りませんが、楽してモジュール使うとか、system 'wget -色々'; とか使った方が楽なような気がしまつでつ。
あと、UA送信した方がよいかもしれません。
それともPerlが、勝手に付けてくれるのかな?
(自鯖ではUA無しは即アク禁にしていまつ。)
0833nobodyさん03/01/04 19:50ID:???
>>831
件の
http://www.google.co.jp/index.html
は・・・GETだけですと、302のLocationを返すみたいですね。
試してみた限りではHost: を送信するとウェプページが返ってきました。

print S "GET /".$path." HTTP/1.0\r\n";
print S "Host: hogehoge\r\n";
print S "\r\n";

グーグルではHost: もチェックしているようです。
083483103/01/04 22:18ID:BNGRljfr
>>832 さん
>>833 さん
レスありがとうございます。
ググルは御陰様で解決しました。
404を返していた(個人サイトなので公開は控えておきます)サーバは
RefererにHostを入れて送ることで正常に取得出来ました。
どうやら直リンクを禁止してたようです。

>system 'wget -色々';
窓ユーザーなのでPerlからUNIXのコマンドが使えるとは知りませんでした。
これを機会にUNIXの勉強をしようかと思います。

#改良版
print S "GET /".$path." HTTP/1.0\r\n";
print S "Accept: */*\r\n";
print S "Referer: http://".$host."\r\n";
print S "Accept-Language: ja\r\n";
print S "Accept-encoding: gzip, deflate\r\n";
print S "User-Agent: Mozilla/4.0\r\n";
print S "Connection: Keep-Alive\r\n";
print S "Host: ".$host."\r\n";
print S "\r\n";
0835nobodyさん03/01/04 22:27ID:tgEtvNOB
>>827
場所をちゃんと指定した変数(?)を使わないといけない場合(use strict)に使う。かも。
%::a == %main::aだから・・
0836偽PG03/01/05 00:04ID:X0VKDjVo
Perlで開発するのか分かりませんがご教授を。
オンラインで利用可能なツールの作成を考えている状況です。

あるWEBページがあります。
そのページには「IDNumber的な数字」「誕生国」「人名」が並んでいます。

上記はID=人名の関係です。
例)
ID=1 / 誕生国=日本 / 人名=豊臣秀吉
ID=2 / 誕生国=中国 / 人名=諸葛孔明

【考えているツールの流れ】
�@入力フォームを用意して文章を入力する。
 (文章には不要情報も含まれている)
↓
�A文章中にIDが存在する場合、そのIDに該当する生まれ情報を
 指定WEBページより取得する。
 (WEBページの中にテーブルでID・誕生国・人名が並んでいる)
↓
�B取得した誕生国情報が日本3人・中国2人と複数存在した時には
 それぞれの誕生国の数をカウントする。
↓
�C結果をHTML形式にして表示させる。

ローカルの情報ではなくWEBページから情報を取得して
カウントする事は可能なのでしょうか?

いちいちWEBページの情報を参照するのが面倒だと思って
作成を考えた次第です。
方法等はちょっと思いつきに近いものがあります。
スレ違いなら申し訳ないです。
0837nobodyさん03/01/05 00:06ID:???
>>836
環境によって読めない文字を平気で使う奴にWebプログラマとしての心得があるとはとても思えない。
0838偽PG03/01/05 00:15ID:X0VKDjVo
機種依存文字については申し訳ないです。
これからWEBプログラムを学ぼうとしたのに
こんな所で突っ込まれては俺もダメですな。マジ勉強しなきゃ。
0839nobodyさん03/01/05 00:17ID:???
>>838
ああ、すまんな。言い過ぎた。

>ローカルの情報ではなくWEBページから情報を取得して
>カウントする事は可能なのでしょうか?

サーバが外にコネクションを張ることを許可しているならできる。
0840nobodyさん03/01/05 00:29ID:0ij2w7ok
CGIのためにWindows上でテスト用としてperl使えるようにしたいんですけど
実行できないで困っています。ActivePerlをインストールしました。インストール
先はc:\perl\binになっていました。pathも通っているので、DOSプロンプトで
perl -vとやってみると、ちゃんとバージョン情報がでるので、一応動くようなのですが
ブラウザからCGIを実行させようとするとできません。*.plファイルの最初の一行は
#!/perl/bin/perlとしているのですがこれが間違いでしょうか?
エラーメッセージは

Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:

'perl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

となるんですが、どなたか助言お願いします
0841nobodyさん03/01/05 00:31ID:???
>>840
で、どのサーバ使ってるかは秘密?
0842偽PG03/01/05 00:34ID:???
>>839
ありがとうございます!
後は許可しているかの確認とWEBプログラムか。
行うことの目的ができて感謝です。
0843nobodyさん03/01/05 00:50ID:???
>>840
ウェブサーバソフトの名前を書いてよ。
084484003/01/05 00:52ID:0ij2w7ok
>>841 >>843

すいませんでした。
AN HTTPD daemon ver1.42dというやつです。
0845nobodyさん03/01/05 00:54ID:???
>>844
きちんと一行目のPerlへのパスを解釈するようにANHTTPdを設定した?
084684003/01/05 01:00ID:0ij2w7ok
>>845
それはどこで設定するのでしょう?
とりあえずDocumentRootの設定と/~UserNameと /cgi-bin/の仮想パスとローカルパス
というところはチェックしてみました。その他はいじってません
0847nobodyさん03/01/05 01:01ID:???
>>846
ん?
CGIの設定のところにそれらしい項目がないか?

だんだんスレ違いな話題になってきたな。しかたないけど。
084884003/01/05 01:04ID:0ij2w7ok
>>847
すいません。やっとわかりました。
「#!の行を調べる」というチェック項目があってそこに
チェックをいれたら実行することができました。
ありがとうございます。スレ違いごめんなさい。
084984703/01/05 01:05ID:???
試しにインストールしてみた。
拡張子ごとの設定の編集のところで、「#!の行を調べる。」という項目があるでしょ。
そこにチェックを入れてみて。
085084903/01/05 01:05ID:???
あら・・・
085184003/01/05 01:08ID:0ij2w7ok
>>850

ああ!!申し訳ないです。
わざわざインストールまでしてもらって。
親切にありがとう。
0852nobodyさん03/01/05 02:42ID:TaQfxWs2
チャットのスクリプトで行き詰まっています。どなたかご教授下さい。
在室者リストに(*.dat)に 名前<br> の順で書き込まれている状態から、
退室時にその人の 名前<br> だけを削ろうとして
if (($who ne '') && ($proc eq 'exit')) {
$out_mem = "$who<br>";
open (OUT, "+<$sanka");
flock (OUT,2);
@list = <OUT>;
foreach $outlist(@list) {
$outlist =~ s/$out_mem//g;
print OUT "$list";
}
flock (OUT,8);
close (OUT);
}
と書いたのですが、名前が載りっぱなしになってしまいました。
試しに、 +< を +> に変更したら今度は必要な名前まで
一緒に削れてしまいました。
ご助言をお願いします。
0853nobodyさん03/01/05 03:02ID:???
その削除したい人の名前以外をメモリーに全て待避して、
ファイルの中身をtruncateしてから待避したものを書き出せばいいんじゃないの。
0854nobodyさん03/01/05 03:02ID:???
>>852
perlの大罪その1.

print OUT "$list";
↓
print OUT "$outlist";

use strict ;しる。
085585203/01/05 03:31ID:TaQfxWs2
>>853
名前以外を退避…。
そちらに頭が全くまわってなかったです。
アドバイス有難うございます!
>>854
なんという基本的な間違いを。ご指摘有難うございます。
早速修正します。
0856nobodyさん03/01/05 09:18ID:2NV2xWH6
サーバー上に作ったフォルダが削除できません。
(自分でおいたCGIのせい?)
どうしたら削除できますか?
サーバーはinfoseekです.
0857nobodyさん03/01/05 09:19ID:???
>>856
自分に対する書き込み権限を立てて消す。
0858nobodyさん03/01/05 09:26ID:2NV2xWH6
>>857
もう少し詳しくお願いします
0859nobodyさん03/01/05 09:28ID:???
chmod 600 ./*
rm -rf ./
0860nobodyさん03/01/05 09:49ID:???
>>856
FFFTPとかで消せないって言うか、ファイルが見えないんだろ?
任意のコマンド ってあるから>>859みたいに
chmod 644 ./ファイル名
0861nobodyさん03/01/05 10:05ID:2NV2xWH6
>>860
FFFTP ですが 任意のコマンドで chmod 使えません。
どのフォルダのパーミッションをかえればいいのでしょうか
0862nobodyさん03/01/05 10:57ID:???
infoseekでファイル消せないって質問は定期的に出てくるな。
あそこはnobodyで動いてるから、自分でコーディングもできない利用者は
そりゃハマるだろうよ。

っつうか、そもそもPerlと何の関係が?
086385203/01/05 14:32ID:C4pjTkfz
一晩眠って、853様のアドバイス通り、一度リストを配列に逃がしてから
不要な名前を削って再度リストに並べ直す方法で巧く出来ました。
本当に助かりました。ありがとうございます。
0864nobodyさん03/01/05 17:51ID:???
>>855
いやいや漏れが言いたかったのはここまで有用な言語でありながら
変数定義と参照に関する処理系の警告機構が利用されていない
@listとして定義して$listとしてのアクセスは警告に値する。
(というか、この場合$listってどういう意味が有る?)

-wスイッチで起動すると解決するのか?
0865nobodyさん03/01/05 22:51ID:???
>>864
お前>>854じゃ無いのか?
0866nobodyさん03/01/05 22:53ID:???
>>864
>-wスイッチで起動すると解決するのか?

ドキュメント読むか実際に試してからほざけ。
0867nobodyさん03/01/05 23:18ID:LhQ0NrhB
>>864
まだまだPerl初心者だね。
スカラー、リスト、ハッシュには、別々な名前空間(?)が存在するから、
$list @list %listは同時に使うことができる。

-wを付ければ、定義されていない変数がどーたらって警告が出るし、
use strictをつければ、コンパイル時にエラー(グローバル変数の利用)出て、
実行してくれない。から変数名を間違えたって気づくはず。
0868nobodyさん03/01/05 23:31ID:+d9WGquV
◆◇◆◇◆最新情報◆◇◆◇◆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0869nobodyさん03/01/05 23:43ID:???
Perlのことを勉強しようと思って、本屋に売ってたCGIRescueという本を買ってきた。
その本の作者には何か奇妙な癖のようなものがあって、
スカラー、リスト、ハッシュの変数名に同じ名前を割り当てているケースが多くて、
1行ごとプログラムリストの解説が載っているにもかかわらず、
はじめはわけがわからなかった。

特にforeachのところでは必ずといっていいほど
foreach $hoge(@hoge){}みたいになっていた。
0870nobodyさん03/01/06 00:07ID:???
一行毎に解説って
$i = $i + 10; # $iを10増やす
でつか?
0871おまけ03/01/06 00:12ID:hDz3fIfA
1.
my $hoge
foreach $hoge (@hoge) { }

2.
foreach my $hoge (@hoge) { }

1よりも2の方がいい。
0872nobodyさん03/01/06 00:30ID:???
円グラフで表示されるアンケートを作りたいです。
例えば
価格。COMみたいな製品評価を皆でするタイプ。
http://kakaku.com/prdsearch/detail.asp?ItemCD=001004&MakerCD=30&Product=FMV%2DDESKPOWER%20C18B

あとは
http://www.jinvestor.com/cgi-bin/bbscode.cgi?c=6748
こんな感じで皆で評価できるタイプを作りたいのですが、初心者なのでよくわかりません。
無料のCGI配布してるとこ等、探しましたが、なかなか上記に見合うタイプのがないです。
何か助言お願いします。もし作り方知ってられましたら是非教えてください。お願いします。
0873nobodyさん03/01/06 01:15ID:???
>872
まずは円グラフがどういうものかの勉強からやり直してきてください。
0874nobodyさん03/01/06 01:32ID:???
>>872
GD::Graph::pie使えば円グラフ簡単に作れるけど、GD::Graphが
使えるかどうかは管理者に聞いてくだちい。
087586903/01/06 01:52ID:???
>>871
その本のプログラムはPerl4で書かれていたからmyは使ってなかった。
localも何故かほとんど使ってなくて、
$hogeや@hogeみたいな変数は全てグローバル変数だった。
0876nobodyさん03/01/06 08:12ID:???
>>843-4
ありがとうございました。
0877nobodyさん03/01/06 18:53ID:???
>>875
そんな本ステステ
0878nobodyさん03/01/06 21:42ID:???
PerlでHTTP鯖みたいなことはできますでしょうか?
アクセスがあるとHTTPの文書を返せればよいのですけれど
0879nobodyさん03/01/06 22:09ID:???
>>878
たとえば、どんなことですか?
具体的にお願いします。
0880nobodyさん03/01/06 22:20ID:???
>>878
できます。

>>879
HTTPサーバについて勉強。
0881nobodyさん03/01/06 23:05ID:???
>>878
Webmin(w
088286403/01/07 01:48ID:???
>>878
調べたら簡単に出来るモジュールがあった。
http://search.cpan.org/author/GAAS/libwww-perl-5.68/lib/HTTP/Daemon.pm
そのまんまだ、
サンプルをいじって見れば、、、
0883864 2/303/01/07 01:49ID:???
>>882
----httpd.plとして作成
use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN)
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
----
0884864 3/303/01/07 01:50ID:???
>>883
試しとして同じDIR上にaaaa.htmlを作成
perl httpd.pl 8888 で起動。8888は任意のポート番号
ブラウザからhttp://ホスト名/aaaa.html で表示を確認した。
しかし、これだけだとマルチスレッドとならない為完全な同時アクセスには対応していない。
(先のページには同時に5要求の待ち合わせが出来るように書いてある?)

以上
0885864 03/01/07 01:57ID:???
>>884 訂正
ブラウザからhttp://ホスト名/aaaa.html で表示を確認した。
  ↓
ブラウザからhttp://ホスト名:8888/aaaa.html で表示を確認した。
0886nobodyさん03/01/07 03:26ID:???
>>884 Linuxならば下の様にfork入れてマルチOK。エロムービーDLと同時にページアクセス出来た。
use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN)
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
0887nobodyさん03/01/07 03:31ID:???
>>886 fork入ってなかった。再掲
use HTTP::Daemon;
use HTTP::Status;
my $d = new HTTP::Daemon(LocalPort =>$ARGV[0]) || die;
print "Please contact me at: <URL:", $d->url, ">\n";
while (my $c = $d->accept) {
my ($family, $port, $heraddr) =unpack('S n a4 x8',$c->peername);
my $pid = fork() ;
if ($pid!=0) {
next ;
}
else {
while (my $r = $c->get_request) {
print "Accept from:".Socket::inet_ntoa($heraddr)." Port:".$port."\n";
print " User-Agent:".$$r{"_headers"}{"user-agent"}."\n";
if ($r->method eq 'GET' and (-e '.'.$r->url->path)) {
if ($c->send_file_response('.'.$r->url->path)) {
print "Get file: .".$r->url->path."\n" ;
}
} else {
print "Not Respons ".$r->method." ".$r->url->path."\n" ;
$c->send_error(RC_FORBIDDEN);
}
}
print "Close Connection :".Socket::inet_ntoa($heraddr)."\n";
$c->close;
undef($c);
}
}
0888nobodyさん03/01/07 14:19ID:???
どうでもいいけど中級者コーナーっていうの作れば?
リファレンスとかバリバリ使ってる初心者は嫌だ。
0889nobodyさん03/01/07 15:42ID:???
>888
一度立った事があるけど、今は残ってない。
初心者と中級者の線引きを決めないと上手くいかないよ。

tu-ka,中級者は自分で調べる事(自力で解決する術)を知ってるから、
あまりこういうところで聞かないんだよな。
0890nobodyさん03/01/07 23:25ID:???
つーわけで、自称初心者のみなさん、ほかの質問が小難しくても
どんどん質問してください。
当然、
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
0891nobodyさん03/01/08 00:41ID:???
自分はフブラウザからアップロードしたファイル名を取得したくて↓の処理をしてみたんですが
if ($fname =~ /filename="(.*)"/){
my $tmp = $1;
if ($tmp =~ /\\/){
for ($fi = (length $tmp) - 1; $fi >= 0; $fi--){
if ("\\" eq substr($tmp, $fi, 1)){
$fi++;
last;
}
}
$fname = substr($tmp, $fi);
}else{
$fname = $tmp;
}
}else{
$fname="";
}
Windowsから十二名の乗客.jpgを取得しようとすると
二名の乗客.jpgとなってしまいます。
どなたか良い方法をご教授ください。
0892nobodyさん03/01/08 03:07ID:???
\(5C)を含む2バイト文字の話だから$fnameを処理する前に
文字コードをECU-JPにしてその後SJISに戻すとか…
ちなみに処理は1行で

$fname =~ m/([^\\]*)"$/;
print $1;
0893nobodyさん03/01/08 04:18ID:???
>>892
ありがとうございます。
一行でMACからもUNIXからも取得できますでしょうか?
とりあえず一度やってみます。
0894えり03/01/08 10:27ID:RjcWJJ7/
activeperlをインストールしたのですが、なんか変になってしまって
アンインストールしたいのですがどうすればいいですか?
アプリケーションの追加と削除で削除したのですがperlのフォルダーが残っており
又、フォルダーの中身ものこったままです
0895nobodyさん03/01/08 11:05ID:???
>>894
アンインストールで残ったのはゴミ箱に入れてもOKです。
0896nobodyさん03/01/08 13:03ID:3CJ1U7Io
「辞書」を作りたいんですが、どうすればいいんでしょうか。
たとえば、
テキストファイルに「青」、「うんこ」とあったら
perlで五十音順に並べ替えたりできるんですか?
0897nobodyさん03/01/08 13:05ID:???
>>896
「青」、あお、せい

少なくとも英語版Perlでは大変。
089889603/01/08 14:05ID:???
そうですか、やっぱり大変なんですか。
少なくとも読み仮名が無ければ厳しいんですね。

http://www.mytools.net/cgitools/dictionary0.html
こういうの見つけましたが、構成ファイルが多すぎてセッティングしてません。
089989103/01/08 14:31ID:???
>>892
取得できませんでした。
0900えり03/01/08 15:39ID:RjcWJJ7/
>895
ありがとうございました!!!
0901nobodyさん03/01/08 20:51ID:OEI4EUTr
>>898
kakasiを使えば、ある程度は、正しい読み仮名を付けれるよ。
0902nodody03/01/08 22:13ID:1Pe5J1+N
プログラミングを始めて1ヶ月の初心者なのですが、BBSを自作
してみたいと思っています(スキルアップのために)。

ソースの見やすさを考える以外に気をつけておいた方がいいことが
あればご教授下さい。
Perlを使用します。

(特定の記述法は特に効率が悪いからやめろとか)
0903nobodyさん03/01/08 22:16ID:???
>>902
まぁ、一本書いてみなよ。それにツッコミ入れる方が効率よさそうだ。
0904nobodyさん03/01/08 22:23ID:???
>>902
変数の初めに数字を使用しない。
0905nobodyさん03/01/08 22:24ID:???
>902
ローカルでテストする。
これ、最優先事項。
0906nodody03/01/08 22:26ID:1Pe5J1+N
>>903
マジで見てくださるのですか!?
じゃあ、マッハでつくります。

>>904
ありがとうございます。
気をつけてみます。
0907nobodyさん03/01/08 22:28ID:???
>>906
use strictと-w
0908nobodyさん03/01/08 22:30ID:atnjxi5O
use strictってなに?
参考書に載ってなかった。おしえてくだちい。
レス数が900を超えています。1000を超えると表示できなくなるよ。