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

このエントリーをはてなブックマークに追加
1988
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
2988:2005/12/08(木) 22:49:46 ID:???
関連スレ
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/

Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/

CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/

【 スクリプト改造依頼スレ 】(丸投げ) part4
http://pc8.2ch.net/test/read.cgi/php/1127916965/
3988:2005/12/08(木) 22:50:11 ID:???
4988:2005/12/08(木) 22:50:34 ID:???
5988:2005/12/08(木) 22:51:00 ID:???
6988:2005/12/08(木) 22:51:24 ID:???
7988:2005/12/08(木) 22:53:25 ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
8988:2005/12/08(木) 22:54:09 ID:???
9988:2005/12/08(木) 22:54:50 ID:???
10nobodyさん:2005/12/08(木) 23:07:31 ID:???
>>1
11nobodyさん:2005/12/09(金) 01:22:40 ID:TPUe6z63
文字コードの問題です。
ActivePerl 5.8.7でTk使ってます。
処理のなかではTkの表示の部分でdecode('cp932',$hoge);としています。
Textヴィジットにユーザーに文字を入力してもらいそれを$txt->getを使って取得した場合、
取得した値のエンコードは何になっていますか?どう扱えばいいですか?

どのshiftjisやutfとか指定してもバグってしまい、何をどうしたらいいのやら・・・
12nobodyさん:2005/12/09(金) 02:32:35 ID:???
>>11
当てずっぽうで試さず、受け取った文字列の16進ダンプでも
吐かせりゃすぐ分かると思うんだが。
別解: http://www.kt.rim.or.jp/~kbk/perl-5.8/guess.html
13nobodyさん:2005/12/09(金) 11:55:02 ID:???
HTMLを出力するCGIを作っているのですが、以下のファイル構成で
open (F,">list.html");
print F "Content-type: text/html\n\n";
print F "<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>\n";
print F "<head><META http-equiv=Content-Type content=text/html; charset=Shift_JIS><title>aaaaa</title></head>\n";
print F "<body>\n";
print F "<div align=center>\n";
print F "</div>\n";
print F "</body>\n";
print F "</html>\n";
close (F);
とするとうまくいくのですが、
open (F,">/list/list.html");
にするとファイルに書き込んでくれません。パーミッションは両方のlist.htmlともに666です。
どなたかアドバイスお願いします。
/
 |
 +-- cgi-bin / aaaaaa / aaaaa.cgi
 |                 list.html
 |
 +-- list / list.html
14nobodyさん:2005/12/09(金) 12:02:07 ID:???
サーバーには
ドキュメントルートとサーバールートがあります。
1513:2005/12/09(金) 12:06:46 ID:???
>>14
ありがとうございます。ドキュメントルートをサーバールートにしたらうまくいきました。
16nobodyさん:2005/12/09(金) 15:38:16 ID:???
phpで配列のこぴーはどうしますか?
17nobodyさん:2005/12/09(金) 15:41:16 ID:aD6KYfo9
ドキュメントルートとファイルシステムルート
の方がなんとなくわかりやすいな。

チェンジルートしてると必ずしもファイルシステムルートではないのか・・
18nobodyさん:2005/12/09(金) 16:01:11 ID:???
>>16
ふつうに質問スレまちがいましたすみません。
19nobodyさん:2005/12/10(土) 00:23:57 ID:jGywlXJC
バイナリ(SHA1のハッシュ)比較をしたいのですが、どのようにすれば良いのでしょうか?
数値や文字列用の比較演算子を使うのは何か違いそうな気がしたので。。
20nobodyさん:2005/12/10(土) 00:30:39 ID:???
>19
eq
2119:2005/12/10(土) 00:32:32 ID:???
>>20
ありがとうございます(_ _)eqはビット比較みたいなものなんですね。
22nobodyさん:2005/12/10(土) 10:11:23 ID:???
>>21
no
23nobodyさん:2005/12/10(土) 17:51:34 ID:I7IfvFhx
>>21
ぜんっぜん違う
24nobodyさん:2005/12/10(土) 20:09:08 ID:VtAwQeXl
$hogeの中の
<form>〜</form>の間にある<input name="なんとか" value="なんとか">からnameとvalueを抜き出して、
<a href="アドレス?なんとか=なんとか&なんとか=なんとか">ああああ</a>
というリンクを書きくわえたいんですが、さっぱりわかりません。
下のは試してみたソースですが、動きません。
どうすればいいのか、だれか教えてください。
(下のは無視してください)

while ($hoge=~m/((?:<form>)?.*?<form[^>]*?action=('|")?(.*?)(?:\2| )?.*?>.*?<\/form)/is){
$tmp='';$form=$form2=$1;$action=$3;
$form2=~s/(<input[^>]*?name=('|")?(?!submit)(.*?)(?:\2| )?[^>]*?value=('|")?(.*?)(?:\4| )?.*?>)/
($tmp) ? ($tmp.="&".$3."=".$5) : ($tmp=$3."=".$5);$1;/esgi;
$form2=~s/(<\/\s*?form>)/$1<br><a href="$action$tmp">ああああ<\/a>/i;
572 $hoge=~s/$form/$form2/si;
573 }
25nobodyさん:2005/12/10(土) 20:13:07 ID:???
572 573というのは関係ないです
すみません
26nobodyさん:2005/12/10(土) 22:18:36 ID:???
>>24-25
これで合ってるのか分からんけど。

my $attr = qr/(?:"[^"]+"|'[^']+'|\S+)/;
$hoge =~ s{<form\b([^>]*)>(.*?)</form>} {
  my $form = $2;
  my $path = $1 =~ /\saction=($attr)/i ? $1 : '/path/to/default';
  $path =~ s/^["']|["']\z//g;
  my $param = '';
  while ($form =~ m|<input ([^>]*?)/?>|gi) {
    my($attrs, %attr) = ($1);
    ($attr{lc $1} = $2) =~ s/^["']|["']\z//g
      while $attrs =~ /\s(name|type|value)=($attr)/gi;
    ($attr{'type'} ||= 'text') =~ /^(?:text|password|checkbox|hidden)\z/i
      and $param .= "$attr{'name'}=$attr{'value'};";
  }
  length $param ? qq|<a href="$path?$param">ああああ</a><br>| : '';
}egis;

以後この手の依頼はこちらへ。

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
27nobodyさん:2005/12/11(日) 11:59:44 ID:???
>>1
28nobodyさん:2005/12/11(日) 14:06:02 ID:???
>>1000
29nobodyさん:2005/12/11(日) 14:07:18 ID:???
質問マダァ-? (・∀・ )っ/凵⌒☆チンチン
30nobodyさん:2005/12/11(日) 22:24:54 ID:Ihn+hQ6U
教えてください。お願いしますm(_ _)m

$ua = $ENV{'USER_AGENT'};

@ua = (
'Mozilla','Netscape','Opera','Firefox');

$uaa = @ua;


(ここの処理がわかりません)
USER_AGENTの中に@uaの配列の中のどれかが含まれてたら真、含まれてなかったら偽を返す

if (真のとき)

{
print "あああ";
}

elseif {

print "いいい";

}
31nobodyさん:2005/12/11(日) 22:45:42 ID:???
elseifって、、、perlの質問だよね?

(Here's one way to do it)
if (grep {/$ua/} @ua) {
 print "あああ";
} else {
 print "いいい";
}
32nobodyさん:2005/12/11(日) 22:46:14 ID:???
for(@ua){
if($_ eq $ua){
$flag = "1";
last;
}
}

if($flag){
print "あああ";
}else{
print "いいい";
}
33nobodyさん:2005/12/11(日) 22:51:40 ID:???
ヒント:$uaが空
34未承諾広告※ ◆TWARamEjuA :2005/12/11(日) 22:52:57 ID:0eadQ7WE BE:3267465-###
my $ua = $ENV{'USER_AGENT'};
print eval {
for ('Mozilla','Netscape','Opera','Firefox'){
return 'あああ' if /$ua/;
}
return 'いいい'
}
35未承諾広告※ ◆TWARamEjuA :2005/12/11(日) 22:53:38 ID:0eadQ7WE BE:5336677-###
あ、そうか、、、(汗)>空のとき
36nobodyさん:2005/12/11(日) 22:54:05 ID:???
perlで改行の数を得るにはどうしたらいいでしょうか?
37nobodyさん:2005/12/11(日) 23:00:30 ID:???
改行コードを数えていけばよい。
38nobodyさん:2005/12/11(日) 23:04:13 ID:???
39nobodyさん:2005/12/11(日) 23:08:36 ID:???
ヒント
HTTP_USER_AGENT
40nobodyさん:2005/12/11(日) 23:26:41 ID:???
いつからこのスレは質問者も回答者もクオリティ低くなったんだ・・
4130:2005/12/11(日) 23:41:51 ID:???
皆さんありがとうございます。
HTTP_USER_AGENTの中にかっこが含まれていると真にならないみたいなんです(Mozzila=○、Mozzila 4.0(compatible...)=×)
どうすればよいのでしょうか?(;_;)
42nobodyさん:2005/12/11(日) 23:42:22 ID:???
>>40
君がそのクオリティの高い回答を示さないからだよ。
43nobodyさん:2005/12/12(月) 00:00:05 ID:???
>41
つ「quotemeta」
44nobodyさん:2005/12/12(月) 00:28:56 ID:???
乗り遅れたyo。

grep{ /\Q$ua\E/ } @ua;
これで実装しても、

$ua = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
こうなら、

grep { m{\QMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\E} } @ua;
これはマッチしないっしょ。
45nobodyさん:2005/12/12(月) 09:57:35 ID:???
@ua =
こうしないとな。
46nobodyさん:2005/12/12(月) 19:58:15 ID:BQNUAhRM
掲示板等で、フォームで受け取った文字を
表示するとき、フィルタリングすべき文字は
「&、<、>」とかありますが、それ以外に
フィルタリングが必要な文字はどんなものがありますかね
47nobodyさん:2005/12/12(月) 20:06:34 ID:???
48nobodyさん:2005/12/12(月) 20:15:06 ID:???
\x00とか?
49nobodyさん:2005/12/12(月) 20:16:30 ID:???
>>46
危ない文字を潰すのではなく安全な文字列だけ取り出すのが基本。
http://www.ipa.go.jp/security/awareness/vendor/programming/a04.html
50nobodyさん:2005/12/12(月) 20:24:48 ID:???
2chでも文字化けを利用?して壊れたスレみたいなことになってるのが昔あったね。
SJISでないコードを送りつけたのかどうやったのかは知らないけど。
51nobodyさん:2005/12/12(月) 21:07:50 ID:???
2chでは送られて来た文字列の文字コードをきちんとチェックしていなかった。
Shift_JISの上位1バイトだけを送っても、そのまま表示されていた。
この状態では、次の1バイト分の文字は漢字の下位1バイトとして扱われる。
ここにタグの"<"や">"があるとタグが壊れる。
52nobodyさん:2005/12/12(月) 21:32:13 ID:???
なるほどそうだったのか。情報サンクス。
53nobodyさん:2005/12/12(月) 22:25:19 ID:???
SJISを厳密にチェックするのはなかなか面倒だからなぁ。
ttp://www.yahoo.co.jp/
とか入力すると化けちゃったりとか、結構ある。
54nobodyさん:2005/12/12(月) 22:26:18 ID:???
やべ・・・すんまそん
55nobodyさん:2005/12/12(月) 22:34:31 ID:???
前後に半角スペースでも入れときゃいいんじゃね
56nobodyさん:2005/12/12(月) 22:37:40 ID:???
二つ質問をさせてください。

一つは通信されるデータ量についてなのですが、
printで表示させたhtml分だけ通信されると考えていいのでしょうか?
つまりCGI内の変数に大量の文字列が入っていてもprintされなければ
通信されないのかということをお聞きしたいのです。
何故こんなことを聞くかというと携帯用に作っているのでパケット代が気になるからなのです。
もしCGI内のソース全てにパケット代が生じるのであれば、データは別ファイルにまとめようと思っています。
サーバーで動くCGIであると考えればhtml分だけだと思うのですが不安です。

もう一つあります。CGIは特別な処理をしなくてもダウンロードされる心配はないと考えていいのでしょうか。
つまり第三者にダウンロードされてソースが見られることがあるのか気になったのです。

分かり辛い質問かもしれませんがよろしくお願いします。
57nobodyさん:2005/12/12(月) 22:39:12 ID:???
前者:そのとおり
後者:パスワード等と記したファイルはドキュメントルートより上に置いた方が良い
58nobodyさん:2005/12/12(月) 23:14:46 ID:???
なるほど分かりました!
ありがとうございます!

人に知られたくないものは上に置きますね。
59nobodyさん:2005/12/12(月) 23:15:52 ID:???
追伸
速レス頂けたのにお礼の返事が遅れて済みませんでした。
60nobodyさん:2005/12/13(火) 04:28:32 ID:???
ハッシュのリファレンスを格納した配列同士を、foreachの多重ループで
$hoge->{'bar'}=$moge->{'bar'}と記述してしまって、左辺に
値でなくてリファレンスが入ってしまって泣きそうなんですけど、
例えばすべて$hoge{'bar'}[$i]といった多重配列のフォーマットにして
書き直したほうがいいのでしょうか。
61nobodyさん:2005/12/13(火) 04:38:08 ID:???
>>60
>>1
1: 自分はこういう事がしたい。
何がやりたいのか書いとくれ。それによって適したやり方があるから

ただ配列をコピーしたいだけなら
@arr1 = @arr2;
でできるし、ディープコピーをしたいならCloneモジュールを薦めるし
62nobodyさん:2005/12/13(火) 12:59:52 ID:???
>>56
一つ目:

否。クライアントからのリクエストパケットも通信量に含まれるよ。
あと、携帯だと、中継サーバが対象端末用に言語を変換している場合も。

でも基本的なことは >>56 のでOK。
63nobodyさん:2005/12/13(火) 13:51:22 ID:???
>>62
>>56はそんなことは承知と思われ。
どちらにしても送信側のパケット通信料は発生するのだから。
64nobodyさん:2005/12/13(火) 14:29:33 ID:???
11:3=B
65nobodyさん:2005/12/13(火) 14:31:28 ID:???
>>64
それは式としておかいしいだろ?
66nobodyさん:2005/12/13(火) 14:32:29 ID:???
(・∀・)
67nobodyさん:2005/12/13(火) 14:34:02 ID:???
誤爆。>>64も誤爆
6860:2005/12/13(火) 14:50:00 ID:???
例を書いていたらそれはうまく動作するようになりました。
再度出直してきますorz

どうにも強引ですが、内部のリファレンスをコピーしてしまっている
例を挙げます。
$hoge=[{'id'=>'65563','count'=>'11'},{'id'=>'87214','count'=>'14'}];
$moge=[{'id'=>'65563','count'=>'32'},{'id'=>'87214','count'=>'28'}];

@$hoge=@$moge;
$moge->[0]{'count'}=60;
print $hoge->[0]{'count'};
69nobodyさん:2005/12/13(火) 17:44:46 ID:???
>>68
強引というか、それが普通の挙動で、リファレンスのいいところでもあるのに
ちなみに>60の「多重配列」もリファレンスだからね
70nobodyさん:2005/12/13(火) 22:31:03 ID:???
use CGI qw/:standard/;

my $cgi = new CGI;
if(param()){
if (param('save')){
print header(-type => "text/html",-charset =>"x-euc-jp" -cookie => param('test'));
}else{
print header(-type => "text/html",-charset =>"x-euc-jp");
}
printDump,start_html('test'),start_form,
"クッキーにデータを保存する",
submit(-name => '保存', -value => 'save');
end_form,end_html;
}else{
printheader(-type => "text/html",-charset =>"x-euc-jp"),
Dump,start_html('test'),start_form,
checkbox(-name => 'test', -value => 'test'),p,
submit,end_form,end_html;
}
71nobodyさん:2005/12/13(火) 22:34:20 ID:???
このような簡単なCGIを組んでみました。
親CGIでsubmitを押すと、子のCGIに親のフォームデータが送られますが、
その子CGIでsubmitを押すと、孫CGIには親のフォームデータが引き継がれません。
子CGIで、親CGIのフォームデータをhiddenfiledなどに入れれば良いのですが、
フォームデータが多い場合は少々煩雑になってしまいます。

何かスマートな方法がありましたら、ご教示願えますでしょうか。
72nobodyさん:2005/12/13(火) 22:38:04 ID:???
ミスがありました。

false print header(-type => "text/html",-charset =>"x-euc-jp" -cookie => param('test'));
true print header(-type => "text/html",-charset =>"x-euc-jp", -cookie => param('test'));

false submit(-name => '保存', -value => 'save');
true submit(-name => 'save', -value => 'save');

以上、よろしくお願いします。
73nobodyさん:2005/12/13(火) 23:29:21 ID:???
かなり初歩的なことかもしれませんが、質問させて下さい。
別スレにて、「」で囲まれた単語を抜き出してカウントするスクリプトの
ソースをいただいたのですが、
http://pc8.2ch.net/test/read.cgi/php/1133361560/116
これを数の多い順にソートするにはどう記述すればよろしいでしょうか?
74nobodyさん:2005/12/13(火) 23:36:48 ID:???
7573:2005/12/14(水) 00:00:59 ID:???
あ。。。ごめんなさいそのURL開くの忘れてましたorz
74さん有難うございます!
76nobodyさん:2005/12/14(水) 00:34:23 ID:???
>>71-72
#!/usr/local/bin/perl
use CGI qw/:standard Vars/;
my $charset = 'Shift_JIS'; my %param = Vars;

my($cookie, @form);
if ($param{'save'} eq 'save') { # 孫
  $cookie = cookie(-name => 'test', -value => 'test');
  @form = ('OK');
} elsif (keys %param) { # 子
  @form = (
    'Cookie に保存',
    map(hidden($_, $param{$_}), keys %param),
    submit(-name => 'save', -value => 'save'),
  );
} else { # 親
  my $name = 'a';
  @form = (map(checkbox(-name => $name++, -value => $_), 1..5), submit);
}

print header(-charset => $charset, -cookie => $cookie),
  start_html(-title => 'test', -encoding => $charset, -lang => 'ja'),
  Dump,
  start_form, p(@form), end_form,
  end_html;
7776:2005/12/14(水) 00:39:21 ID:???
78nobodyさん:2005/12/14(水) 00:44:31 ID:???
>>62-63
サンクス
一応送信側のことは考慮に入れてあります
79nobodyさん:2005/12/14(水) 01:32:12 ID:???
>>76
おお!早くも神レス大変ありがとうございます。
あまりにもスマート過ぎて、素人な自分には謎の部分(特にVars)が多いのですが、
これから理解して、神コードを取り入れさせていただきます。
Vars はperldocを読んでも今ひとつ理解できなかったのですが、
こんなに便利なものだとは判りませんでした。

繰り返しになりますが、質問に答えていただいてありがとうございました。
80nobodyさん:2005/12/14(水) 02:03:01 ID:???
81nobodyさん:2005/12/14(水) 10:29:49 ID:???
openよりもsysopenを使った方が良いという話を聞いたのですが、
ほとんどの本やwebにあるサンプル等はopenを使ってます。
sysopenのメリットはわかるのですが、デメリットとかあるのでしょうか?
それと何故、サンプル等はopenの方が多く使われてるのでしょうか?
82nobodyさん:2005/12/14(水) 10:48:45 ID:???
>>81
話をした人に聞いてみるのがいちばん。
おれは奨めない。以上。
83nobodyさん:2005/12/14(水) 11:02:06 ID:???
openはパイプとかレイヤーを使うときは便利だし
いちいちフラグ用の定数を用意する必要もないから
openでできることをやる分には楽だよ。

sysopenじゃないと指定できないフラグの組み合わせが
あるからそういうときはsysopen使うけど。
84nobodyさん:2005/12/14(水) 11:10:22 ID:???
>>82
話した人ってのは、メリットを話した上で勧めたんだろ?
だから、「sysopenのメリットはわかるのですが」と書いてある。
…で、>>81は多くがopenの方が使われてるのを疑問に
思ったんじゃないの?
あと、何故勧めないのか書かないと回答にならんよ。

>>81
漏れは>>83と同じようにフラグ用の定数用意がめんどう。
パイプ等はあまり使わないから、sysopenでも良いんだけどね。
8573:2005/12/14(水) 12:37:52 ID:???
>>73です。何度もすいません。
sort { $b <=> $a }でソートされるのはわかったんですが、
どこに記述すればいいのかわかりません。
21行目に、sort {$b <=> $a} %count と書くと、ソートされた数字のみが表示されてしまいます。
86nobodyさん:2005/12/14(水) 13:36:36 ID:???
>>81
sysopen()は環境によって使えなかったりするモードがある。
例えばWindows環境ではロック関連が使えないとか。
それを注意していれば特に問題はないよ。

>>85
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST
> # this sorts the %age hash by value instead of key
> # using an in-line function
> @eldest = sort { $age{$b} <=> $age{$a} } keys %age;
8773:2005/12/14(水) 13:46:19 ID:???
>>86さん有難うございました!!
88nobodyさん:2005/12/14(水) 21:24:43 ID:S7xP2RtY
フォームで入力された文字の中に
全半角英数字・全角日本文字(ひらがな・カタカナ・漢字)以外の文字
が入っているか判定したいのですが、
そのための正規表現を教えてもらえませんか、文字コードはEUCです。
89nobodyさん:2005/12/14(水) 21:49:35 ID:???
>88
>8にあるサイトが詳しいので良く読むといいよ
90本日@挫折90%:2005/12/14(水) 22:43:42 ID:SzJP4ieY
質問なのですが、本日勉強したのですが、print関数やprintf関数
等勉強したのですが、perlプログラムのサンプルを見たのですが、
まったく桁が違うすごいプログラムでした、このまま本の通りに
覚えていけばいいのか、正直不安になりました、このまま、焦らずに
本書どおりに進めていいのでしょうか?
熟練した方もしいい教材などありましたら、参考におしえてください。
91本日@挫折95%:2005/12/14(水) 22:45:21 ID:SzJP4ieY
↑すいません、日本語おかしくなってしまいますた。不安度+5%;
92nobodyさん:2005/12/14(水) 22:50:34 ID:???
一日で諦めたり近道探したりするなら向いてないんじゃない?
バット二三回振って打てねーよとか言われても誰も相手しないよ
93nobodyさん:2005/12/15(木) 00:33:35 ID:???
>>90
最初から全てを理解できる人が居たら、それは天才。
他人が書いたperlのソースをスラスラ読めるようになったら上級者。
(ピンキリあるし、神レベルのコードはそれはそれで読むのが難しい。)
94nobodyさん:2005/12/15(木) 01:11:02 ID:???
プログラミングの勉強と学校の勉強の違うところは
文章(コード)中に知らない文法やら単語がいっぱいでてくるところだろうな。
わからないところはとりあえず飛ばせばOKくらいでやらないと
学校の勉強に慣れてきた人間には正直ツラいと思う。
95nobodyさん:2005/12/15(木) 01:37:31 ID:w2M1wJUg
>>81
openはパイプ文字による外部プログラブが実行可能です。
「ブラウザで入力した情報をformにて送信して、
その情報のファイル名を表示するなんてCGIを作った場合、
入力文字にパイプを混入されるとセキュリティ上危険(入力文字検査すればOK)」
が理由のアドバイスかもね。
96nobodyさん:2005/12/15(木) 08:39:34 ID:???
my %count;
{
local *FH;
-f $file or die "No such file.\n";
open FH, '<' . $file or die $!;
while (<FH>) { ++$count{$_} for 「 (.*?) 」/g }
close FH;
}
print
header(-charset => $charset),
start_html(-encoding => $charset, -lang => 'ja'),
table(Tr([ map td([ $_, $count{$_} ]), sort keys %count]) ),
end_html,

文中の単語の数を数えるスクリプトなんですが、
「x回以上出た場合はbgcolorをredにする」という風にしたくて、
if(5<$count{$_}){$bg="orange";}を追加して、
tr部分に{-bgcolor=>$bg}を追加したんですが、上手く変わってくれません。

どなたかご教授お願い致します。
97nobodyさん:2005/12/15(木) 08:43:28 ID:???
またCGI.pm厨か!
9896:2005/12/15(木) 08:45:17 ID:???
ほんと何度もすいませんですorz
CGI.pmっていうのがそもそも何なのか・・・
99nobodyさん:2005/12/15(木) 09:23:31 ID:???
>>96
書き換えたあとのコードさらせよ。

100nobodyさん:2005/12/15(木) 09:30:08 ID:???
for 「 (.*?) 」/g

いくらPerlでもこんな自由な書き方できないだろ?
101nobodyさん:2005/12/15(木) 11:20:29 ID:???
http://pc8.2ch.net/test/read.cgi/php/1133361560/

こっちのスレから誘導されてきたやつだ
102nobodyさん:2005/12/15(木) 12:17:37 ID:???
my %count;
{
local *FH;
-f $file or die "No such file.\n";
open FH, '<' . $file or die $!;
while (<FH>) { ++$count{$_} for 「 (.*?) 」/g }
close FH;
}

if(5<$count{$_}){$bg="orange";}

print
header(-charset => $charset),
start_html(-encoding => $charset, -lang => 'ja'),
table(Tr([ map td({-bgcolor=>$bg},[ $_, $count{$_} ]), sort keys %count]) ),
end_html,

こんな感じで書きました。

>>100
for 「 (.*?) 」/gのほうは問題なく動作してます
103nobodyさん:2005/12/15(木) 13:38:24 ID:???
>>102
while (<FH>) {...}を抜けた直後は$_はundefになってる筈なので、
そこで

if(5<$count{$_}){$bg="orange";}

などとやっても意味がない。

直し方としては、どれか一つでも5を超えたら全部色をかえたいのか
5を超えたやつだけ色を変えたいのかで違ってくるが、説明が不明瞭
なのでなんともいえんな。
104nobodyさん:2005/12/15(木) 13:49:29 ID:tLuO4r1h
$string に以下の#1#の文が入っていたときに

$string =~ s/\r//;
$string =~ s/\n//;
という処理をしたら
出力したときに#2#の結果になります。
1行目は確かに文字列から改行が取り除かれていますが、
3、4行目は変わっていません。
すべてに対して改行を取り除く方法ってありますか?

# 1 ####################
お願いします
おねがいします

本当
おねがいします"
########################


# 2 ####################
お願いしますおねがいします

本当
おねがいします
########################

105nobodyさん:2005/12/15(木) 13:52:52 ID:???
最近ほんと意味不明な質問が増えたな
106nobodyさん:2005/12/15(木) 13:55:39 ID:???
$string =~ tr/\x0A\x0D//d;
107nobodyさん:2005/12/15(木) 13:59:42 ID:???
お願いしますおねがいします本当おねがいします
108nobodyさん:2005/12/15(木) 14:01:43 ID:tLuO4r1h
>>106
できました。
ありがとうございます!!!
109nobodyさん:2005/12/15(木) 14:10:23 ID:???
>>103
できれば5区切りで色を変えたいと思ってます。
10以上黄色、15以上オレンジ、20以上赤みたいな感じです。
お手数ですがお願いします。
110nobodyさん:2005/12/15(木) 14:15:52 ID:???
丸投げすんなうんこ
111nobodyさん:2005/12/15(木) 14:29:41 ID:???
>>109
perlをやりたいんじゃなくて、
特定の事だけをやりたいのなら、改造スレへどうぞ。
112nobodyさん:2005/12/15(木) 14:31:42 ID:???
>111
わかりました。有難うございました。
113nobodyさん:2005/12/15(木) 15:19:56 ID:tLuO4r1h
if ($form{'どのうようにして'} =~ /インターネット/){if ($csv) {$csv_data .= '1,';}}
else {if ($csv) {$csv_data .= '0,';}}

formから渡された「どのようにして」に”インターネット”というキーワードが入っていた
場合、1というデータをCSVファイルに挿入したいんですが、
どうやら、上の記述に間違いがあるみたいです。
記述ミスありますか?

114nobodyさん:2005/12/15(木) 15:23:56 ID:???
Shift_JIS使ってるに10000ペリカ
115nobodyさん:2005/12/15(木) 15:26:36 ID:tLuO4r1h
>>114
使ってますねwww
どうすればいいのかな?対処方法知ってたら教えてください
116nobodyさん:2005/12/15(木) 15:29:56 ID:???
ちょっとは自分で調べような
/\Qインターネット\E/
http://perl.misty.ne.jp/meta.html
117nobodyさん:2005/12/15(木) 15:34:15 ID:tLuO4r1h
>>116
サンクス。 htmlからフォーム渡すとき
この部分だけ valueを 日本語から 数字に変えて渡したら上手くいったよ。
SHIFT JISややこしいね。
118本日@挫折0%:2005/12/15(木) 18:44:33 ID:3wI62WI7
挫折より帰還しました
今後ともよろしこお願いします。
119nobodyさん:2005/12/15(木) 21:41:38 ID:???
ここはコーディング初心者スレであって、Perl教室ではない。
120nobodyさん:2005/12/15(木) 22:02:39 ID:???
そしてここは質問スレであって、今日のPerl日記スレじゃない。
121nobodyさん:2005/12/15(木) 22:26:35 ID:???
=cut

はいはい、ここまでカット
122俺の日記@パールちゃん:2005/12/15(木) 23:41:06 ID:3wI62WI7
以下、俺の日記となります
123nobodyさん:2005/12/15(木) 23:46:19 ID:???
ここまでコメントな

=cut
124nobodyさん:2005/12/16(金) 00:03:04 ID:???
__END__

最強
125nobodyさん:2005/12/16(金) 01:21:20 ID:???
EOF
126nobodyさん:2005/12/16(金) 03:05:21 ID:???
^Z
127nobodyさん:2005/12/16(金) 05:31:09 ID:nqW99XKP
だめだ。
ヒアドキュメント使うとソースが見づらいorz
128nobodyさん:2005/12/16(金) 10:52:03 ID:???
# >>1に則った質問ほど答えてもらえる可能性がございます。

use strict;
129nobodyさん:2005/12/16(金) 18:01:05 ID:???
elseifと書いたらエラーが出るのは、嫌がらせかなんかですか?
130nobodyさん:2005/12/16(金) 18:09:46 ID:???
131cbi-cgi/count/dayx.cgi?gif:2005/12/16(金) 19:52:49 ID:u8eearJF
$ip_check = 1
132カウンター2日目:2005/12/16(金) 19:58:13 ID:u8eearJF
;上付け忘れた・・
.txtに変換
16<>1000<>2000<>3000<>fri<><>
133nobodyさん:2005/12/16(金) 21:22:32 ID:Nkz0ct/3
リンクページにページ送り機能を追加するんですが、
その際リンクを、順番ではなくランダムで表示するようにしたいんです。

それぞれのページで、重複したリンクが表示されないようにしたいのですが、
具体的にどのようにコーディングすれば良いのでしょうか?
134nobodyさん:2005/12/16(金) 21:26:03 ID:???
ランダムに配列から取り出した後、その要素をspliceで取り除く
135nobodyさん:2005/12/16(金) 21:30:13 ID:???
それの繰り返し
136nobodyさん:2005/12/16(金) 21:43:16 ID:Nkz0ct/3
表示するページをランダムに決めて、
それをパラメータとしてURLに含めるといった感じの処理でいいんでしょうか?
137nobodyさん:2005/12/17(土) 00:09:34 ID:???
ページのナンバーを配列にでも突っ込んでシャッフルして、
それを順番に出力すりゃいいんじゃね?
参考になるかわからんが、こんなんどうよ

@array=();
for ($count = 0; $count < 7; $count++) {
 push(@array,$count);
}
&shuffle (\@array);

sub shuffle {
 my $array = shift;
 my $i;
 for ($i = @$array; --$i;) {
  my $j = int rand ($i + 1);
  next if $i == $j;
  @$array[$i, $j] = @$array[$j, $i];
 }
}
138nobodyさん:2005/12/17(土) 00:33:28 ID:???
>>136
分からないのは
・リンクするページを混ぜる(シャッフルする)部分
・どうやってリンクするのか
のどっち?
139nobodyさん:2005/12/17(土) 11:47:28 ID:???
>>138
下です。
140nobodyさん:2005/12/17(土) 18:08:47 ID:???
1.テンプレートなどを利用して全てのページを動的に出力する
2.ページ移動用のスクリプトを用意して、ページ移動用のリンクに全部埋め込む
3.SSIを利用して、リンクの部分を別ファイルで用意する

一定時間ごとに混ぜるのなら3.でもいいけど、
訪問者ごとに違う順番を見せるのなら3.は向かない。
2が一番無難。

って答えでいいかしらん。
141nobodyさん:2005/12/17(土) 18:18:13 ID:???
>>136の言いたいことがまだわからないのは俺だけだろうか
142nobodyさん:2005/12/17(土) 21:16:26 ID:6Cij4iqn
ネット上でIDやパスワードなどの登録画面などで登録後に前のページに
戻ったりすると「有効期限切れ・・・・」という画面がでますが
そういう仕組みってどうすればいいんですか?
perlからすこしそれた質問かもしれませんが教えてもらえませんか?
143 ◆TWARamEjuA :2005/12/17(土) 21:45:58 ID:??? BE:5227968-
Expire:とかExpireとか
144nobodyさん:2005/12/17(土) 21:51:48 ID:???
画像をアップロードしたいのですが
アップロードされたファイルの、保存される前のファイル名の取得方法をおしえてください。
おねがいします。
145nobodyさん:2005/12/17(土) 22:07:09 ID:???
フォームからmultipart/form-dataでデータ飛ばして
観察してみろと。
146nobodyさん:2005/12/17(土) 23:16:57 ID:???
それを聞いてるのでは?・・・
147nobodyさん:2005/12/18(日) 03:17:23 ID:3ossMEQR
ページを戻ると
警告 : ページの有効期限切れ
が出ます。
少し調べてみたところ、入力フォームがあるとこうなるらしいですね。
入力フォームを残したまま、エラーを出させないようにすることは出来ないでしょうか?
よろしくお願いします。
148nobodyさん:2005/12/18(日) 05:12:35 ID:7vISx30W
>>147
perlとは関係無いこと
外池
149nobodyさん:2005/12/18(日) 05:21:50 ID:???
>>147
お前は五スレ前も見えないのか。
150nobodyさん:2005/12/18(日) 15:57:02 ID:???
perlで,外部サイトへのリンク切れは
どのようにしてチェックできますか?
よろしくお願いします。
151nobodyさん:2005/12/18(日) 18:11:14 ID:???
外部サイトってなんだよ
何がやりたいのか意味不明
152150:2005/12/18(日) 18:22:15 ID:???
意味不明でごめんなさい。
1万件のリンクをリンク切れかどうかチェックするスクリプトを作りたかったのですが、
何とか自力で作ることができました。

解決です。m(_ _)mぺこり
153nobodyさん:2005/12/18(日) 20:24:45 ID:???
3時間かからないで作ったのかヨ。って、別人だろ
154nobodyさん:2005/12/18(日) 20:26:52 ID:???
んなの5分もいらないだろ
155nobodyさん:2005/12/18(日) 22:42:45 ID:???
>>148-149
無理なのか。期限切れにならないサイトもあったから操作可能なのかと。
サンクス。
156nobodyさん:2005/12/18(日) 23:12:38 ID:7vISx30W
えくすぱいあ
以上。
>>155
文も読めないやつはマズは国語から学べよチンカスが
ほかいけや
157nobodyさん:2005/12/19(月) 00:33:37 ID:???
素朴な疑問。
multipart/form-dataのときにもexpireヘッダって効いたっけ?
前にテストしたとき効かなかった(というよりはキャッシュのセキュリティで弾かれたっぽい)記憶があるんだけど?
158nobodyさん:2005/12/19(月) 00:53:51 ID:???
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
159nobodyさん:2005/12/19(月) 01:41:23 ID:???
プロクシオミトロンが入ってたら無効なんだけどね。信用しすぎはイクナイ
160nobodyさん:2005/12/19(月) 01:42:18 ID:???
「情報を再送信しないとページを更新できません」
という警告はブラウザの機能だから、サーバ側では操作できないと思うが。
これとは違うのだろうか。
161nobodyさん:2005/12/19(月) 01:57:53 ID:mSKnbNI+
>>159
プロクソミトロン
162nobodyさん:2005/12/19(月) 10:37:15 ID:???
基本的な質問で恐れ入ります。
rand関数についての質問ですが

$i = int(rand(100));
$i には、0 〜 99 の乱数がセットされる

と、とあるサイトに説明されていたのですが、この例の場合100が
セットされることはあり得るんでしょうか?
int関数は小数部分を切り捨てて整数化するので100を返す場合は100.000…
以外ないと思うので確率的に考えて自分で実際にプログラム作って試して調べるのは
とてもじゃないですが無理だと思いますので、どなたか教えてください。
163nobodyさん:2005/12/19(月) 10:54:10 ID:???
ありません。
perldocにあった気がしたけどURL忘れた
164162:2005/12/19(月) 10:59:59 ID:???
>>163
有り難うございました!!
乱数を使ってて、ふと気になったもので。
165nobodyさん:2005/12/19(月) 11:08:36 ID:???
簡単に調べられるじゃん。

for (1 .. 1000000){
100 <= rand(100) and print "100 Over.\n";
}
166nobodyさん:2005/12/19(月) 11:14:46 ID:???
( ゚д゚)ポカーン
167nobodyさん:2005/12/19(月) 11:41:23 ID:???
>>165
それじゃ証明できんだろ
というかrand(EXP)で0からEXP未満までの数をかえすと説明されてるし
168nobodyさん:2005/12/19(月) 15:14:31 ID:nE/lruN5
質問です。
英語のフォームページを作っています。
htmlの中で
<html lang="en">と
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
として英語用にしています。

フォーム自体はきちんと動くのですが、届いたメールのタイトル(件名)が文字化けします。
「英語ページよりお問い合せ」が「英語ペ?[ジよりお問い??ケ」になります。
英語ペ\ージよりお問い\合せとか英語\ペ\ー\ジよりお問\い\合\せなど試してみたのですが、うまくいきません。
jcode.plはcgiの中に読み込んでいますが、ページの内容が英語しかない場合は日本語を完全には使えないのでしょうか?
169nobodyさん:2005/12/19(月) 15:20:26 ID:???
とりあえず
http://www.atmarkit.co.jp/fnetwork/rensai/netpro03/netpro01.html
ここの前編と後編読んでからもう一度来いや
170168:2005/12/19(月) 16:02:23 ID:???
>>169 ありがとうございます

■日本語はテキストではない?〜テキストの送受信
を読んで、単純に
Content-Type: text/plain; charset="ISO-2022-JP"

Content-Type: text/plain; charset="SJIS"
に変えたらいいのかな、って思いましたがうまくいきませんでした。


http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html
の●一般的なヘッダでの利用を読んで
subject:のところに=?ISO-2022-JP?B?と?=を入れて、
その間にタイトル(件名)として使う文章をbase64で変換した文字を入れました
ttp://phpspot.net/php/pgbase64%83G%83%93%83R%81%5B%83h%83c%81%5B%83%8B.html
は何故かうまくいかなかったので
ttp://www.vector.co.jp/soft/win95/util/se139646.html
でbase64に変換しました。

これでできました。ありがとうございました。
171nobodyさん:2005/12/19(月) 17:13:11 ID:mSKnbNI+
rand は 0〜99.99... まで
小数点以下がどれくらい続くかは知らない
172 ◆TWARamEjuA :2005/12/19(月) 19:45:57 ID:??? BE:6099078-
え?
173nobodyさん:2005/12/19(月) 19:55:13 ID:???
み?
174nobodyさん:2005/12/19(月) 20:12:41 ID:???
り?
175nobodyさん:2005/12/19(月) 22:15:36 ID:M/zhZkxT
Perl暦数ヶ月の初心者です。
頑張ればPerl/CGIで簡単な掲示板を作れるかも、という程度でしょうか。

現在、HTML::Templateを使ってコーディングしています。
テンプレートファイル内から TMPL_VAR でパラメータを渡す時、

$template->param(
  'PARAM_1' => $var { 'PARAM_1' } ,
  'PARAM_2' => $var { 'PARAM_2' } ,
  'PARAM_3' => $var { 'PARAM_3' } ,
);

というようにやるところを、
出来るだけ動的に行いたいと思っています。

テンプレートファイル内のパラメータ PARAM_XX に対し、
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、
どのようにコーディングすれば良いでしょうか。


自分なりに、環境変数一覧を書き出すプログラムを参考にして

foreach my $key ( keys %var ) {
 $template->param ( $key => $var { $key } ) ;
}

と書いてみたのですが、値が渡された様子はありませんでした。

176175:2005/12/19(月) 22:25:36 ID:???
失礼。

誤:
ハッシュ $var { 'PARAM_1' } の値を渡せるようにしたいのですが、

正:
ハッシュ $var { 'PARAM_XX' } の値を渡せるようにしたいのですが、


それと、Perlのバージョンは5です。
177nobodyさん:2005/12/19(月) 22:46:36 ID:???
それでわたるはずだが。思い違いじゃない?

% perl -e 'use HTML::Template; $t = HTML::Template->new(scalarref => \ "A=<TMPL_VAR NAME=A>\nB=<TMPL_VAR NAME=B>\n"); %h=(A=>"foo", B=>"bar"); foreach $k(keys %h){$t->param($k=>$h{$k});} print $t->output;'
A=foo
B=bar
178 ◆TWARamEjuA :2005/12/19(月) 23:15:53 ID:??? BE:3920966-
$template->param(map +($_, $var{$_}), map sprintf(qq|PARAM_%d|,$_), (0..XX));
(@_@)
179nobodyさん:2005/12/19(月) 23:18:48 ID:???
おっかしーなー……



(10分後)


変数名違ぇじゃん… orz


ご迷惑おかけしました。
俺の半日はなんだったんだ。
180nobodyさん:2005/12/19(月) 23:30:59 ID:mSKnbNI+
ループでぶん回せばいいだけじゃん
181nobodyさん:2005/12/20(火) 00:11:38 ID:???
m9(^Д^) プギャー
182nobodyさん:2005/12/21(水) 09:34:15 ID:m1/a3jED
リンク元を 取り出すためにはどうすればいいでしょうか?
183nobodyさん:2005/12/21(水) 09:53:57 ID:m1/a3jED
$ENV{'HTTP_REFERER'} を使えばいいってことは分かるんだけど
流れとして


どっかリンク元→ a.html → b.cgi

ってかんじでaのフォームで変数をb.cgiに渡すってかんじなんだけど
b.cgiで$ENV{'HTTP_REFERER'}を使うと、a.htmlがリンク元として
表示されてしまいます。
どっかリンク元の環境変数を得るにはどうすればいいですか?
184nobodyさん:2005/12/21(水) 10:25:10 ID:???
>>183
a.htmlをa.cgiにしてそこで取得する
どっかリンク元→ a.cgi → b.cgi

またはa.htmlでJavascript使って渡す
185nobodyさん:2005/12/21(水) 12:44:51 ID:m1/a3jED
>>184
javascriptでも出来るんですか!?
186nobodyさん:2005/12/21(水) 14:50:11 ID:kTJQiyq+
hogehoge配下の.txtファイルであれば全てpermissionを664にすると言うプログラムを作りたいと思います。

opendir DIR, "hogehoge" || die "cannot open";
@entry = readdir DIR;
foreach(@entry){
 opendir DIR, "$_";
 @entry = readdir DIR;
 if($_ =~ /.txt\z/){
  $changemode = chmod 0664, "$_";
 }
}

と書いたのですが、
hogehogeの中にディレクトリがあった場合は。そのディレクトリの配下にあるディレクトリやファイルを更新しません。
hogehoge配下にあるディレクトリやファイル全てを読み込むようなプログラムを作るのにはどのようにしたらよいでしょうか?
187nobodyさん:2005/12/21(水) 15:24:50 ID:???
>>186
再帰
188nobodyさん:2005/12/21(水) 16:13:34 ID:???
>>186
楽してモジュール使えば?File::Findとか。
189nobodyさん:2005/12/21(水) 18:40:34 ID:???
>>187-188
ありがd
結局Find使わずにやりました。
てか、作ってからFindに気がついたorz
190nobodyさん:2005/12/21(水) 18:47:58 ID:???
質問させてください。
語尾が.htmlで終わるものを「処理」を行っているのですが、
.htmlだけでなく、.htm .jpg .gif も「処理」対象にしたい場合は
どのような正規表現を使ったらよいですか?

if($file =~ /.html\z/){
 処理
}
191nobodyさん:2005/12/21(水) 18:58:47 ID:???
if ($file =~ /\.(html?|jpg|gif)) {
foo();
}
192nobodyさん:2005/12/21(水) 19:31:01 ID:HAcTfIEX
ある本にperl5.8以降では、\p{Han}+ で漢字に一致すると
書いてるので、プログラムに
if($abc=~/\p{Han}/){ 
を記述しているのですが漢字に一致しません。
$abcには漢字が含まれているのですが・・・
一致させるには、ほかに記述すべきことがあるんでしょうか?
193nobodyさん:2005/12/21(水) 20:03:06 ID:???
>>191
ありがとう!
194nobodyさん:2005/12/21(水) 20:59:20 ID:???
>191
つ/
195nobodyさん:2005/12/21(水) 21:04:57 ID:???
>>192
decodeしてる? $abcがEUCのままなんて事は無いよな?
196nobodyさん:2005/12/21(水) 21:37:38 ID:ib12VQrv
JavaScript の replace() はリファラそのままスルーしたとおもった
197nobodyさん:2005/12/21(水) 21:41:14 ID:???
>>191
つ$
198192:2005/12/21(水) 21:45:01 ID:HAcTfIEX
>>195
何もしてないのでeucそのまんまです。
「use encoding 'euc-jp';のように、
スクリプトに使っている文字コードを指定することで
\p{Han}+でEUCに正しく一致する」とだけ本には書いてあるので、
プログラムにuse encoding 'euc-jp'の一行を加えましたが、
一致しませんでした。
多分ものすごく基本的なことが理解できてないのだと思います。
もしかしてeucをUnicodeに変換しないとダメということなんでしょうか?
もしそうならその仕方を教えてもらえないでしょうか?
199nobodyさん:2005/12/21(水) 22:37:39 ID:???
>>192
初めて知った機能だよ。

use encoding qw(euc-jp);
my $str = "漢字";
$str =~ /\p{Han}/ and print "true";

一応こんなでも通るけど。
200nobodyさん:2005/12/21(水) 23:02:05 ID:???
>>198
shift-jisで書いちゃってるとか?
201192:2005/12/22(木) 00:17:58 ID:l+S0SPkv
というか
use encoding 'euc-jp'のところでエラーが発生してます
error.log見てわかりました。
Wide character in print at ....ってなってるんですが・・・・
なんでなんかな。perlは5.87なのにapche2.0やIE6では駄目とか?
202nobodyさん:2005/12/22(木) 00:23:22 ID:???
>>201
>>199のコードでも通らないの?
203nobodyさん:2005/12/22(木) 07:24:22 ID:???
204nobodyさん:2005/12/22(木) 10:49:59 ID:iSEjIkIt
ファイル郡から拡張子だけを抜き出すにはどのようにしたらよいですか?

例えば
start.exe
readme.txt
stop.exe
index.html

と並んでいたら、
.exe
.txt
.exe
.html
のように抜き出したいのですが
205nobodyさん:2005/12/22(木) 11:41:44 ID:???
@filenames = ("hoge.txt", "foo.bar.avi", "baz.jpg");

foreach $filename (@filenames) {
push @extensions, (split(/\./, $filename))[-1];
}

foreach $extension (@extensions) {
print $extension, "\n";
}
206nobodyさん:2005/12/22(木) 12:12:50 ID:???
>>204
print join "\n", map /(\.[^.]+)\z/, qw(start.exe readme.txt stop.exe index.html);
207204:2005/12/22(木) 13:00:30 ID:???
>>205-206
ありがとうございます!
208204:2005/12/22(木) 13:05:37 ID:iSEjIkIt
204-205を参考に
拡張子が重複する(フォルダは無視)場合は表示しないようにするプログラムを作ってたんだけど、
うまくいきません

例えば
start.exe
hogehoge/
readme.txt
stop.exe
index.html
readme.html

と並んでいたら、
.exe
.txt
.html
のように抜き出したいのですけど、、

センスないのかなorz・・・
209nobodyさん:2005/12/22(木) 13:11:55 ID:???
>208
日記はチラシの裏にでも書いてろ
210nobodyさん:2005/12/22(木) 13:15:55 ID:???
このスレって実績ある?
211nobodyさん:2005/12/22(木) 13:16:55 ID:???
あるよ。
212nobodyさん:2005/12/22(木) 13:37:43 ID:???
>>208
Perlをなめてんのか?
連想配列にでも突っ込めよ
213204:2005/12/22(木) 14:43:03 ID:iSEjIkIt
出来ました
if(-f $file){
push @extensions, (split(/\./, $file))[-1];
$fext = (split(/\./, $file))[-1];
}

foreach $extension (@extensions) {
$ext{$extension} = $ext{$extension} +1;
}
($key,$value) = each %ext;
while(($key,$value) = each(%ext)){
print $key, " - ", $value, "\n";
}

>>212のアドバイスがききました
ありがとうございました
214nobodyさん:2005/12/22(木) 16:51:29 ID:9N6o95FW
CGI::Application を使ったモジュール内でエラーが起こった時に、
出力を CGI::Carp qw(fatalsToBrowser) のようにするには
どうすればよいんでせう?

215nobodyさん:2005/12/22(木) 16:57:57 ID:???
こういうのは?つCGI::Application::Plugin::DebugScreen
216214:2005/12/22(木) 17:14:18 ID:???
>>215
早速ありがとう!
dependecies にひっかかってなかなかインストールできなかったけど
無理やり動かせた。
開発効率かなりあがりそうだ。

でも、この画面ユーザには見せたくないね。
やっぱエラー処理はちゃんと書かないとダメそうだ。
217nobodyさん:2005/12/23(金) 10:26:25 ID:???
>>214
CGI::Applicationのpod見れ
218nobodyさん:2005/12/23(金) 16:23:03 ID:???
読んだんなら引用すればいいのに(*´・д・)(・д・`*)ネー
219nobodyさん:2005/12/23(金) 17:31:00 ID:???
m9(^Д^) ・・・
220nobodyさん:2005/12/24(土) 19:39:16 ID:???
( ^ω^)・・・
221nobodyさん:2005/12/24(土) 23:29:23 ID:???
encodingの話ですが、
use encodings "cp932";
を指定しているとき、 URLエンコードされたものが、正常にデコード
できません。

#!/usr/bin/perl

use strict;
use encoding "cp932"; #ここをコメントすれば上手くいく
binmode STDERR, ":encoding(cp932)";

print "Content-Type: text/html; charset=Shift_JIS\r\n\r\n";
my $value;
$value = '%95%5C%8E%A6'; #表示
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "しふとじす\n";
print $value;

肝心の$valueが、ちゃんと"表示"に戻りません。
use encodingsの指定をやめると正常に動きます。

原因は何となくわかる (内部はutf-8で処理しているから?)
のですが、対処方法がわかりません。

ここ嫁 でも結構ですので、教えていただけませんか?
222nobodyさん:2005/12/24(土) 23:34:37 ID:???
>>221
encoding、PerlIO::encoding、perlunicode を見ろ。
223221:2005/12/24(土) 23:34:41 ID:???
書き忘れました。
やりたいことは、ソースコードをShift_Jis(cp932)で統一したいのと、
実際に、CGI.pmを使った場合でも、GET、POSTされた Shift_Jisのデータ、
正確には、URLエンコードされたもの、が正常に取得できないので、
これをどうにかしたい、ということです。
224nobodyさん:2005/12/24(土) 23:35:46 ID:???
>>221
これだけだと不親切だな。>>8 にある Unicode 関連のところも読め。
225nobodyさん:2005/12/25(日) 10:06:00 ID:MhkrUB/B
環境変数で(環境変数でなくてもいいけど)httpであるのか、httpsであるのか見分ける関数ってありますか?
226nobodyさん:2005/12/25(日) 10:50:26 ID:sTNGkhi5
https で接続されたときには環境変数 HTTPS に値がセットされると思った
227221:2005/12/25(日) 12:10:36 ID:???
>>222,224
ありがとうございます。podの方はまだ少ししか読んでませんが、
>>8 の方は読んでみました。
というか、以前から読んでいましたが、理解できていなかった...

#!/usr/bin/perl
use strict;
use Encode;
use encoding "cp932";
binmode STDERR, ":encoding(cp932)";

my $wc = '%95%5C%8E%A6'; #表示
#ただのアスキーコードだけど、utf8フラグがたつ

my $nwc = Encode::encode('cp932',$wc);
#1Byte単位でpackするために、utf8フラグを落とす

$nwc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#utf8フラグの立っていない$nwcに対してpackする。1Byte単位で扱える
#$nwcには、cp932の生バイナリが入る

$wc = Encode::decode('cp932', $nwc);
#$nwcのままでは表示できないので、再びutf8フラグを付ける。

print $wc;
#$wcはutf8フラグが立っているので、STDOUT出力時に
#Encode::encode('cp932',$wc)が内部的には動いている


こんな理解で大体OKでしょうか?
だけど、ずいぶんと回りくどいことしていると思います。
228nobodyさん:2005/12/25(日) 17:27:10 ID:???
> だけど、ずいぶんと回りくどいことしていると思います。
よく分かってるじゃないか。

encoding は一見お手軽に見えるけど、使い勝手悪いよ。
日本語は全て外部ファイルに追い出すのが遥かに楽。
229221:2005/12/25(日) 18:24:14 ID:???
>>228
実はencodingをはじめて知ったとき、『これは使える』と思ったのですが、
URLデコードのところで躓いて、導入をあきらめていました。
そのときは、ソースに日本語べた書きでしたが、やっぱり外部ファイルに分離
するのがいいですね。

encodingを使えば、=~(マッチ演算)などで、半角カナなど(何も考えず)上手く処理できる?
print "本能"; などが文法エラーにならないなど、メリットはありますが...
逆に使えなくなるモジュール等を考えると、デメリット(副作用)の方が多いような。

あと、何かとデバックのために Data::Dumperを使って表示するのですが、
Dumperを使って日本語(の入った変数)を表示した場合、Perl内部コードがそのまま
表示されるので、不便といえば不便ですな。
230nobodyさん:2005/12/25(日) 18:25:21 ID:???
例えば$commentに
てすとhttp://hoge.hoge/index.htmlてすと
が入っていたとします。
そこで$resultに上記のURLを変換(置換)して
てすと<A HREF="http://hoge.hoge/index.html" TARGET="_blank">http://hoge.hoge/index.html</A>てすと
としたいのですがどうしたらよいのでしょうか?
ググったら正規表現とか出てきたのですが、良く分かりませんでした。

自分でやってみたこと
$result = $comment =~ s/(http:\/\/[^ \"\r\n\<]+)/\<a href=\"$1\" target=\_blank\>$1\<\/a\>/g;
print <<END;
$result
END

これをやったら$resultには何も入りませんでした・・・。
231nobodyさん:2005/12/25(日) 19:29:51 ID:???
>>229
必要な所にno encoding入れれば、それほど面倒でもなくなるよ。
それも結構、落とし穴があったりするけど。

>>230
(my $result = $comment) =~ s/ (以下略
それと正規表現も修正。
232231:2005/12/25(日) 20:09:43 ID:???
あっと、>>229宛てのは勘違いしてました。
スマソ。
233230:2005/12/26(月) 00:25:11 ID:???
>>231さんありがとうございました。
(my $result = $comment)
にしたら無事できました。
あとは正規表現を修正しようかと思って
ttp://www.din.or.jp/%7Eohzaki/perl.htm#httpURL
こちらを参考に
s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+
この正規表現を使わせて頂いたのですが
今度はURLのみ表示されません・・・。
どうしたらよいでしょうか?
234nobodyさん:2005/12/26(月) 01:03:13 ID:???
HTML::Templateを使っています。

TMPL_VAR で、改行コードを含んだ文字列を置換するとき
改行コードを<br>や<br/>に変換する便利な方法は無いのでしょうか。
要求される仕様上、<pre>やスタイルシートなど、<br>以外で改行させる方法は不可とします。

現状:
改行コードが自動的に置換されないので、ブラウザ上では改行されて見えない

やってみた方法:
(1) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使う
  → <br>というタグが見えてしまう
(2) 自前で改行コードを<br>に変換、HTML::Templateのサニタイジング機能を使わない
  → 正常に改行されるが、セキュリティ上かなりやばい
(3) 自前でサニタイジング、HTML::Templateのサニタイジング機能を使わない
  → とりあえず問題なく動くが面倒&重い。他の方法はないものか?

Perlのバージョンは5。
HTML::Templateのバージョンは不明。(申し訳ない、比較的新しいとは聞いた
235230:2005/12/26(月) 01:19:00 ID:???
試行錯誤した結果、正規表現を
(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$%#]+)
にしたら上手くいきました。
変更点は
(1) ()で挟んだ
(2) 後ろの方の$と%の間の,を無くした
です。
何でこうなるのかまだ理解してないので自信ないのですが
これであってますよね?
236nobodyさん:2005/12/26(月) 02:03:15 ID:???
>>234
出力する文字列を配列にしてTMPL_LOOPで回すのは無し?
サニタイズぐらい自分でやれよって気はする。

>>235
括弧で挟むのは、置換するところで$1として使ってるから。
カンマは有っても動きそうだけど。
237234:2005/12/26(月) 02:10:56 ID:???
>>236
まあ、サニタイジングくらい自分でやるですよ。
これくらいHTML::Templateの機能にあっても良さそうなもんなんですけどね。

238230:2005/12/26(月) 02:18:17 ID:???
あれ?今やったらカンマ有りでもできました。
できなかったのは他に原因があったのかな・・・。
何はともあれありがとうございました。
239nobodyさん:2005/12/26(月) 10:03:49 ID:???
>>237
Template Toolkitならhtml_line_breakというフィルタがあるので

[% foo | html | html_line_break %]

てな感じでいけるんだけどね。

use strict;
use Template;

my $t = Template->new();

my $input = <<INPUT;
[% foo | html | html_line_break %]
INPUT

my %vars = (
foo => "foo<>\nbar\n&hoge\n",
);

$t->process(\$input, \%vars);
240nobodyさん:2005/12/26(月) 19:53:21 ID:w9go55d/
Perlは初心者なんだが、開発環境がちょっと不足気味だな。

俺は、VC++で自分でつくったやつ使ってるよ。

上半分はエディタで、「実行」をおすと、下半分のブラウザに実行結果がでてくれるんだよ。

だれか、ほしいやついる?いるなら、Vectorにでもうpするけど。
241nobodyさん:2005/12/26(月) 19:59:15 ID:???
いらん
242nobodyさん:2005/12/26(月) 20:09:20 ID:???
いらんいらん
243nobodyさん:2005/12/26(月) 20:15:02 ID:???
いんらん
244nobodyさん:2005/12/26(月) 20:20:26 ID:???
いんりん
245nobodyさん:2005/12/26(月) 20:21:04 ID:???
エディタが限定されるってのが問題じゃないか、と
246nobodyさん:2005/12/26(月) 20:42:19 ID:???
今、CGI::ReadParse を使って test.cgi?name=XXX といったようにGETでデータを受けているんですが、
nameの部分は変わることがないので、これを test.cgi?XXX とゆふうに使えるようにしたいんですが
どうすればいいでしょうか?
247nobodyさん:2005/12/26(月) 21:01:43 ID:???
nameが不変ならReadParseしなくてもQUERY_STRINGをそのまま使ってしまってもいいんじゃないか
248nobodyさん:2005/12/26(月) 21:09:20 ID:???
$ENV{'QUERY_STRING'} ですね
できました!ありがとうございました!!
249nobodyさん:2005/12/27(火) 14:36:05 ID:???
文字列にソが含まれている時に「含まれています」と表示させてたいんですが
my $so='ソ\';
if(/\Qソ\E/){
print "含まれています。";
}
これを実行してもソがひっかかりません。
どうしてですか?
250249:2005/12/27(火) 14:36:55 ID:???
×表示させてたいんですが
○表示させたいんですが
すいません。ミスりました。
251nobodyさん:2005/12/27(火) 15:07:40 ID:???
>>249-250
if (/\Qソ\E/) { は if ($so =~ /\Qソ\E/) { の間違いとして、
'ソ\' は "\x83\x5C" 、
qr/\Qソ\E/ は \Q\x83\\E → \x83\x5C\x5C\x45 。
よってマッチしない。

参考: http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
252249:2005/12/27(火) 15:10:51 ID:???
釣られるやつ居ねぇか。
\x83\x5cだよな。
253nobodyさん:2005/12/27(火) 15:48:24 ID:???
単純なマッチならindex使えよ
254nobodyさん:2005/12/27(火) 18:30:24 ID:???
indexより正規表現の方が速いよ
255nobodyさん:2005/12/27(火) 23:40:00 ID:???
うんにゃ。index()の方が数段速い。
256nobodyさん:2005/12/28(水) 00:47:06 ID:???
case by case
257nobodyさん:2005/12/28(水) 01:30:43 ID:rgfSZuvi
普通にindexの方が早いんじゃねーの?
258nobodyさん:2005/12/28(水) 02:00:31 ID:???
単純な?正規表現は、indexと同じアルゴリズム使ってコンパイルするそうな。
そって>>256
259nobodyさん:2005/12/28(水) 02:01:04 ID:???
orz そって → よって
260nobodyさん:2005/12/28(水) 09:22:40 ID:???
はいはいワロスワロス。
261nobodyさん:2005/12/28(水) 09:27:39 ID:???
ベンチ取ってから言えよ
少なくとも>>249のケースでは正規表現の方が速い
3倍ほどな
262nobodyさん:2005/12/28(水) 09:55:45 ID:???
せっかくベンチとったんなら結果晒しキボン
263nobodyさん:2005/12/28(水) 10:10:27 ID:???
#!/usr/bin/perl
use Benchmark;

$buf = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

timethese(10000000, {
1 => sub { if($buf =~ /JKL/){} },
2 => sub { if(index($buf, 'JKL')){} },
});

----------------------------------------------------------------------

Benchmark: timing 10000000 iterations of 1, 2...
1: 5 wallclock secs ( 4.53 usr + 0.01 sys = 4.55 CPU) @ 2199736.03/s
(n=10000000)
2: 3 wallclock secs ( 1.97 usr + 0.03 sys = 2.00 CPU) @ 4997501.25/s
(n=10000000)
264nobodyさん:2005/12/28(水) 10:34:42 ID:???
>>263
その結果だと261の言ってることとは反対にindexの方が倍以上速いな。
265nobodyさん:2005/12/28(水) 10:34:57 ID:???
やっぱり index の方が速いですね。3倍ほど…。
>>254>>261 は同じ人ですか?
あまり関係無いですが、if(index($buf, 'JKL')){} なんて書くのはバグの元ですよ
266nobodyさん:2005/12/28(水) 10:38:06 ID:???
ベンチの為ならこれで充分だろう・・・神経質なヤツだな
267265:2005/12/28(水) 10:53:48 ID:???
ベンチとしてどうか、っていうと普通に駄目です。
index と正規表現の速さの違いを比べるなら支障は無いので
あまり関係無いと書いたんですが、異なる機構を比較してるのは事実ですし、
やはり目的が何であれベンチとして駄目なものは駄目、と書いた方が良かったですね。
268nobodyさん:2005/12/28(水) 10:59:44 ID:???
思いっきり釣られた…orz
269nobodyさん:2005/12/28(水) 11:04:31 ID:???
なんか出遅れたがせっかく測ったので貼っとく。
http://boobar.hp.infoseek.co.jp/bench/index_vs_m.txt

UTF8 フラグがかんできたりするとまた違うのかも知れん。
270253:2005/12/28(水) 11:40:27 ID:???
こんなに議論してたんかよ。。

おれの意図としては速さ以前に、簡単な正規表現を正しく書けないようなら
index使えと言うほうに比重を置いたつもりだったんだが。
271nobodyさん:2005/12/28(水) 12:31:39 ID:???
ttp://www002.upp.so-net.ne.jp/wing-net/support/

ここのMulti Wing BBSをDLして設定してうpまで
終わったんですが、メインのwingmulti.cgiにアクセスして
設定したパスワードを入力しても、パスワードエラーと出ます。

何度設定しなおしてもパスワードエラーに引っかかるんですが
これって単なるバグでしょうか?

分かる方いたら、試してもらえませんか?
272nobodyさん:2005/12/28(水) 12:33:32 ID:VO6oi9GX
>271
スレ (´∀`( ´∀`) チガイ
273nobodyさん:2005/12/28(水) 12:44:59 ID:???
>>272
どこスレいけばいいかな?
274nobodyさん:2005/12/28(水) 12:54:31 ID:???
>>273
設置に関する質問ならこちらへ

CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784
275nobodyさん:2005/12/28(水) 12:59:45 ID:???
>>274
間に合わなかったようだ
彼は上級者スレに逝ってしまった
276nobodyさん:2005/12/28(水) 13:09:23 ID:???
>>274
うは、すっげぇ、ありがとう
マルチポストはしないほうがいいよね?
277nobodyさん:2005/12/28(水) 13:10:29 ID:VO6oi9GX
誘導されてきました。
って一言書いておけばいいと思う。
278nobodyさん:2005/12/28(水) 13:14:22 ID:RY3kh/X5
>>277
ありがとう。あなた達、本当に人が出来ているね。
279nobodyさん:2005/12/28(水) 21:13:55 ID:FTSvjaED
eval "require $self->{App}; 1;";

では大丈夫だけど、

eval {
   require $self->{App};
   1;
};

では出来ないのってなんでですか?
280nobodyさん:2005/12/28(水) 21:36:23 ID:???
仕様
281nobodyさん:2005/12/29(木) 01:45:17 ID:fGeDbioe
んと、
<うにゃ> <うにゃ>

にたいして、<と>に挟まれた部分すべて(この場合3カ所)に対して処理したいのですが、どうすればいいんですか?

最短でも最長でもなく、すべてにマッチさせたいのです。
282nobodyさん:2005/12/29(木) 02:01:56 ID:???
>>281
print join('/', /(?<=[<>])([^<>]*)(?=[<>])/g), "\n" for qw(
  a<b>c<d>e
  a>b<c>d<e
  a<b<c<d<e
  a>b>c>d>e
);
283nobodyさん:2005/12/29(木) 02:20:00 ID:???
>>279
普通にできるが。

#--- foo.pl ---
print "foo!\n";
__END__

#!/usr/local/bin/perl -w
use strict;
my $self = { App => 'foo.pl' };
eval { require $self->{'App'} } or die $@;
eval { do $self->{'App'} } or die $@;
delete $INC{ $self->{'App'} };
eval "require '$self->{'App'}'" or die $@;
eval "do '$self->{'App'}'" or die $@;
__END__

http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_do_EXPR
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
284nobodyさん:2005/12/29(木) 08:24:52 ID:fGeDbioe
>>282
舌足らずでした。すみません。
>>281
<はげ> <ほげ>
に対して

はげ
はげ> <ほげ
ほげ

をマッチさせたいのです。
285nobodyさん:2005/12/29(木) 09:12:37 ID:???
>>284
sub match {
  my($str, $match, $flag) = @_;
  my $re = $flag
    ? qr/ (?<=<).*(?=>) | ^.*(?=>) | (?<=<).*\z /x
    : qr/ (?<=<).*(?=>) /x
  ;
  if (my @str = $str =~ /$re/g) {
    push @{$match}, @str;
    match($_, $match, 1) for @str;
  }
}
for (qw(
  a<b>c<d>e  a>b<c>d<e  a<b<c<d<e
  a>b>c>d>e  <a>b<c<d>e>f<g>
)) {
  my @match;
  match($_ => \@match);
  print join(' / ', @match), "\n";
}

Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
286nobodyさん:2005/12/29(木) 12:43:26 ID:???
最近perl弄り始めたばかりなのだけど、use strictって積極的に覚えて使った方がいい?
あとみんな使ってるもの?
普通にちょっと弄って使ってる程度の人なら使わなくてもいいものかな。

今までは情報としてへ〜使った方が良いんだぐらいに考えてたんだけど、
cgi改造してたらこういうときに便利なのかなって初めて思ったので質問してみる。
287nobodyさん:2005/12/29(木) 12:46:04 ID:???
>>286
規模にもよるけど、変数のスコープでバグ出すことはなくなるので使う。
ただ、改造にはあまり有用でない。(元がstrictで作られているならともかく)
288nobodyさん:2005/12/29(木) 12:57:29 ID:???
うんち
うんち
しっこ
うんち
しっこ

みたいなテキストを、
うんち*3
しっこ*2

とゆうふうにカウントしたいんですが、どうすればいいかわかりません。
切り出した文字列を変数にしてカウントアップすればいいんでしょうか?
方法があればおしえてください。
289nobodyさん:2005/12/29(木) 13:00:02 ID:???
>>288
ハッシュ
290nobodyさん:2005/12/29(木) 13:11:47 ID:6Q9kRgBG
foreach (@obutsulist){
  $obutsu{$_}++;
}

これでおけだけど、コレからは“例”にも気を付けた方がいいかと思う。
291nobodyさん:2005/12/29(木) 15:32:15 ID:???
>>287
なるほど。
こなれた人が1から組んでく時には有効って感じで考えるぐらいでよさげだね。
こまめに動作確認したり、規模が大きくなければ特に問題なそうだ。
サンクス。
292nobodyさん:2005/12/29(木) 15:39:42 ID:???
>>285
ありがとうです。
293nobodyさん:2005/12/29(木) 21:23:37 ID:???
汚物リストワロタ
294nobodyさん:2005/12/29(木) 22:54:07 ID:???
>>291
そのへんの判断はもちろん自由だけれど、Perl を始めたばかりということなら何も考えずに use strict と use warnings の使用をおすすめしておく。
295294:2005/12/29(木) 22:58:10 ID:???
これらを使わずに書いたプログラムに後から付け加えるという使い方には向いてないので、改造などにはもちろん向かない。
と一応補足。
296nobodyさん:2005/12/30(金) 02:50:44 ID:???
use strictで無い屑スクリプトは改造するに値しない。
297nobodyさん:2005/12/30(金) 04:40:27 ID:???
そうでもない
298nobodyさん:2005/12/30(金) 05:19:31 ID:???
K●NTとか・・・
299nobodyさん:2005/12/30(金) 05:53:13 ID:???
KE●Tとか
300nobodyさん:2005/12/30(金) 05:59:16 ID:???
KENTがいかに優れたコーディングをしてるからって、
妬み丸出しのレスはカッコ悪いぞ>>298-299
301nobodyさん:2005/12/30(金) 07:48:55 ID:???
>>300
今後の参考にしたいと思いますので、
優れた点をご享受いただけないでしょうか?
302nobodyさん:2005/12/30(金) 07:53:10 ID:???
303nobodyさん:2005/12/30(金) 15:49:53 ID:???
KENTで育ち漠然と教科書にしていると俺みたいな腐ったPerl書きになるから注意な!
動けばイイや程度で書いてるとソースが汚いし無駄ばかり
挙げ句に処理も遅く回りくどいことをして回りからはバカにされる
俺のポジションはアイデアの参照スクリプトだけで他の奴が清書する
情けないポジション「抜けようか?」と言うと、それはマジに困ると言うから
何か晒し者のように顔色を伺いながらメンバーに居る感じである。
スキルのチョイとある新参の中堅に笑われて不用みたいに言われ続けハゥゥ
304nobodyさん:2005/12/30(金) 18:16:33 ID:???
>>303
プログラム言語の最低限の知識だけのプログラマ
http://pc8.2ch.net/test/read.cgi/prog/1135701242/

■■■技術を習得するのが辛い■■■
http://pc8.2ch.net/test/read.cgi/prog/1118856179/

ぐち0x13 〜分かったから仕事させてくれ〜
http://pc8.2ch.net/test/read.cgi/prog/1131375876/

年末年始の休み雑談
http://pc8.2ch.net/test/read.cgi/prog/1135924708/
305nobodyさん:2005/12/31(土) 00:50:18 ID:LK7Aj/aS
失礼します。

------------------
#[0]は一意なid
my @a = ('aioue', 'sdfgsdf', 100, 'dsfhsf', 2);
my @b = ('noriri', 'sdfgsdf', 100, 'dsfhsf', 2);
my @c = ('nanndemoi-', 'sdfgsdf', 100, 'dsfhsf', 2);

my @arrr;
push @arrr, (\@a, \@b, \@c);
------------------

上記の@arrrのような二次元配列から、
例えば配列の頭に「noriri」が格納されている行を取り出したい場合、
どのようにして該当する行を求めるのが好ましいでしょうか。

ベタベタに考えると
------------------
my $stmp = 'noriri';
my $pt;
foreach (@arrr) {
 if ($${$_}[0] eq $stmp) {
   $pt = $_;
 }
}
------------------
という感じになってしまうのですが…
もっと効率のいい方法は、ありますでしょうか?

ご教授お願いしますm(_ _)m
306nobodyさん:2005/12/31(土) 01:48:39 ID:???
>>305
[0] が一意である事が保証されるなら最初からハッシュで持てばいい。
もしくはそのように加工後、$arrr{$stmp} のようにアクセス。
順序が必要なら順序のデータを持たせればいい。

my %arrr = (
  aioue => [ 0, 'sdfgsdf', 100, 'dsfhsf', 2 ],
  noriri => [ 1, 'sdfgsdf', 100, 'dsfhsf', 2 ],
  'nanndemoi-' => [ 2, 'sdfgsdf', 100, 'dsfhsf', 2 ],
);

これらの前処理に問題があるなら素直に君が書いたように処理。
307nobodyさん:2005/12/31(土) 02:22:54 ID:???
>>306
ありがとうございます。
とりあえず構造改革できるかどうかやってみます…
308nobodyさん:2005/12/31(土) 02:25:02 ID:???
>>307
「列を検索して行を特定する」ことが目的なら、行と列の置き方が逆の気がする。
マスターキーが決まってるならもちろんハッシュを利用するけど。

my @a = ('aioue', 'noriri', 'nanndemoi-');
my @b = ('sdfgsdf', 'sdfgsdf', 'sdfgsdf');
my @c = (100, 100, 100);
my @d = (2, 2, 2);
309ヽ(´ー`)ノ ◆.ogCuANUcE :2005/12/31(土) 03:52:04 ID:???
構造改革ワロスw

構造を変更しない、もしくは前処理をしないのが前提なら高階関数の方が
好みかなぁ。

use List::Util qw(first);

my $pt = first { $_->[0] eq 'noriri' } @arrr;
310nobodyさん:2006/01/03(火) 01:42:04 ID:???
> Caught exception "Can't locate object method "insert" via package
> "Class::DBI::Sweet" at /usr/share/perl5/Class/DBI/Sweet.pm line 630."

これって、どうやったら解決できる?
311nobodyさん:2006/01/03(火) 04:24:03 ID:???
英語読めてるか?
312nobodyさん:2006/01/03(火) 15:22:09 ID:lh2VfF1u
$Defs = [
{ "title"=>"Config A", "name"=>"A", "type"=>"TEXT", "value"=>"352" },
{ "title"=>"Config B", "name"=>"B", "type"=>"TEXT", "value"=>"" },
{ "title"=>"Config C", "name"=>"C", "type"=>"TEXT", "value"=>"" },
];

連想配列の配列を作ってみたのですが、これでlength($Defs)とすると16が帰ってきます。
これをループで処理するために3を得たいのですが、どうすればいいのでしょうか?
313ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/03(火) 15:36:00 ID:???
>>312
foreach my $it (@$Defs) {
    # 各要素は $it でアクセス
}

もしくは、

for (my $i = 0 ; $i < @$Defs ; ++$i) {
    # 各要素は $Defs->[$i] でアクセス
}
314nobodyさん:2006/01/03(火) 18:10:35 ID:6LWi5P1T
時刻表示を作ってみたんですが。
どうみてもソースが汚いです。
use strict;なスクリプトに修正してもらえませんか?
サブルーチン初めてなので間違いが多いと思うのでアドバイスお願いします


#!/usr/bin/perl

my $time = &Get_Time;
print "content-type: text/html\n\n";
print "$time\n";

exit;

sub Get_Time{
 my $times = time();
 my($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);
 my @week = ('日','月','火','水','木','金','土');
 my $time = sprintf("%04d\/%02d\/%02d\(%s\)%s%02d\:%02d:%02d",$year+1900,my $mon+1,$mday,$week[$wday],my $aft,$hour,$min,$sec);
 return $time;
}
315nobodyさん:2006/01/03(火) 18:27:27 ID:???
なってるじゃん
316nobodyさん:2006/01/03(火) 18:32:22 ID:???
>>314
別に悪くないと思うが。そこからどうシェイプするかは個人のスタイルの問題だし。
317314:2006/01/03(火) 18:37:03 ID:???
>>315
このままで良いという事ですか?
( ゚Д゚ )

それじゃあもうひとつだけお願いします。
サンプルから引き抜いた部分が多いので、$monと$aftの意味が良く分からないのですが、
表示に影響もないみたいなので、削除しても大丈夫なんでしょうか?
318nobodyさん:2006/01/03(火) 18:40:34 ID:QwphIqM2
test
319nobodyさん:2006/01/03(火) 18:42:12 ID:???
>>316
あ、ちょっと待った。機能的な部分まで見てなかったw
$monは$monthのつもりで間違ってるんだろうし(今は0+1月だから問題ないように見えるが)
$aftは何したいのか良くわからんし。自分で流れをよく追ってごらん。
320314:2006/01/03(火) 18:48:13 ID:???
>>319
見逃してた訳ではなかったんですが、おかげさまで理解できました。
ありがとうございました。
他にも見つかったらレスお願いします
321nobodyさん:2006/01/03(火) 18:51:20 ID:???
>>314
つかコピペするんじゃなくて、サンプル見ながら「理解しつつ」自分で打ち込まなきゃ身につかないよ。
322312:2006/01/03(火) 21:22:10 ID:lh2VfF1u
>>313
> foreach my $it (@$Defs) {
> # 各要素は $it でアクセス
> }

これが美しいですね。 ありがとうございました!

323nobodyさん:2006/01/04(水) 01:16:22 ID:???
ある文書内に特定のフォーマットにて書かれた文章を取り出す方法を探しています。
例えば
sample.txt内に
aaa=000
bbb=111
ccc=222

aaa=333
bbb=444
ccc=555
というフォーマットで10個くらい書かれている中から
例えば
aaa=000
bbb=111
ccc=222
なら$aaaに000を格納したいんですが、どうすればいいでしょうか?
教えてください。お願いします。
324nobodyさん:2006/01/04(水) 01:25:44 ID:???
>>323
>>1

依頼されたツールを誰かが作るスレ
http://pc8.2ch.net/test/read.cgi/php/1078997682/

Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/
325nobodyさん:2006/01/04(水) 02:29:09 ID:???
>>323
誘導するほどの話でもないなー。
1.「=」でsplit使って分ける(仮に$leftと$right)
2.$right を ${$left} に代入する

コーディングについてはPerlの本一冊読めば理解できる話だからしない。
326nobodyさん:2006/01/04(水) 02:33:45 ID:???
たいていの場合は$aaaに入れるより適当なハッシュを用意して
$hash{aaa}に入れた方がいいと思うけどな。
327305:2006/01/04(水) 03:10:14 ID:???
>>308-309
いつの間にやらレスが…
すみません、ありがとうございました。

質問したソースのcgiは、とりあえず意地でも正月休み中に動かしたかったので、突貫で作ってしまいました。。
ttp://homepage2.nifty.com/bel_s/webtag/
ソースというかソースはもちろん構造もかなりぐちゃぐちゃです。。
突っ込みどころだらけというかめちゃくちゃだと思いますが何かありましたら突っ込みお願いします。。直すこと前提でとりあえず動かしました。
結局構造改革は大変そうだったのでやめました。自前で作ったfile.pmから作り直しになってしまいそうだったので…。

>>308
全然思いつきもしませんでした。。
使い方によってはだいぶ効率がかわりそうですね。。
verupにむけて参考にさせていただきますm(_ _)m

>>309
チラシの裏ですが今回コンセプトとして「勉強」「設置が楽/場所を選ばない」ってのがありまして、
ライブラリは全部自分で作ってひとつに纏めてしまいました。
328305:2006/01/04(水) 03:14:20 ID:???
>>327
すみません、「突っ込んでね」ではなく、
暇な方や人のソース眺めるのが好きな方いましたら、気が向いたらお願いします程度の意味です。
なんか変な暗黙の行間ができちゃったような気がするので補足。
今日仕事なのになにやってんだおれー
329nobodyさん:2006/01/04(水) 07:38:24 ID:???
>>323

sub read_ini {
 open (INI, shift);
 flock (INI, 1);
 my @ini = <INI>;
 close INI;
 my %INI;
 foreach (@ini) {
  chomp $_;
  if ($_ =~ /^\#|^[(.+)]$|^\/\/|^\[(.+)\]$/ || $_ eq "" || index ($_, "=") < 0) {
   next;
  }
  my $key = substr ($_, 0, index ($_, "="));
  my $value = substr ($_, index ($_, "=") + 1, length ($_));
  if ($key ne "") {
   $INI{"$key"} = $value;
  }
 }
 return %INI;
}
%INI = &read_ini ("test.ini");
foreach (sort keys %INI) {
 print $_ . "\n    " . $INI{"$_"} . "\n";
}

こんなのダメっすか
330nobodyさん:2006/01/04(水) 07:40:11 ID:???
インデントが酷くなったorz

sub read_ini {
    open (INI, shift);
    flock (INI, 1);
    my @ini = <INI>;
    close INI;
    my %INI;
    foreach (@ini) {
        chomp $_;
        if ($_ =~ /^\#|^[(.+)]$|^\/\/|^\[(.+)\]$/ || $_ eq "" || index ($_, "=") < 0) {
            next;
        }
        my $key = substr ($_, 0, index ($_, "="));
        my $value = substr ($_, index ($_, "=") + 1, length ($_));
        if ($key ne "") {
            $INI{"$key"} = $value;
        }
    }
    return %INI;
}
%INI = &read_ini ("test.ini");
foreach (sort keys %INI) {
    print $_ . "\n    " . $INI{"$_"} . "\n";
}

331nobodyさん:2006/01/04(水) 09:42:46 ID:???
split 使えばいいのに。
332nobodyさん:2006/01/04(水) 11:56:31 ID:???
このスレは回答者も初心者なんですね
333nobodyさん:2006/01/04(水) 12:24:17 ID:???
>>332
ヒント: WebProg 板
334nobodyさん:2006/01/04(水) 12:42:50 ID:???
なんか YukiWiki にそれっぽいルーチンがあったぞ。

sub get_info {
my ($page, $key) = @_;
my %info = map { split(/=/, $_, 2) } split(/\n/, $infobase{$page});
return $info{$key};
}
335nobodyさん:2006/01/04(水) 13:57:55 ID:???
>>333
今時ヒントなんて使ってるやつはばかです。
336nobodyさん:2006/01/04(水) 14:00:43 ID:???
>>324-325で答えが出たと思ってた
use FileHandle;
use Data::Dumper;

my $fh = FileHandle->new("sample.txt") or die;
flock($fh, 1);
chomp(my @lines = $fh->getlines());
$fh->close();

my @ini_set;
my $temp = {};
foreach my $line (@lines, ''){
if ($line){
my ($key, $value) = split(/=/, $line, 2);
$temp->{$key} ||= $value;
} else {
keys(%{$temp}) and push(@ini_set, $temp);
$temp = {};
}
}

print Dumper(\@ini_set);

こんな感じでどうなん。
337nobodyさん:2006/01/04(水) 14:34:56 ID:???
#!/usr/local/bin/perl -w
use strict;
my $format = qr/^\s*([^=]+)\s*=\s*(.*)$/;

my $file = $ARGV[0] || './sample.txt';
-f $file || die "No such file.\n";
open FH, '<' . $file or die $!;

# local $/ = ''; # 段落モード
# while (<FH>) {
#  my %data = /$format/gm; # 空行が Record Separator
#  print map("$_:[$data{$_}]\n", sort keys %data), "---------\n";
# }

while (<FH>) {
  /$format/ || next; # フォーマットに合わない行が Record Separator
  my %data;
  do { $data{$1} = $2 } while <FH> =~ //; # 改行が Field Separator
  print map("$_:[$data{$_}]\n", sort keys %data), "---------\n";
}
__END__

参考: http://search.cpan.org/modlist/Option_Parameter_Config_Processing
338nobodyさん:2006/01/04(水) 16:22:38 ID:PpH7t0Dm
キーワードから関連するトラックバックURLやらpingurlを収集する
プログラムってないかな?
339nobodyさん:2006/01/04(水) 17:47:39 ID:???
>>338
>>324
【CGI】こんなCGI探してますver.19
http://pc8.2ch.net/test/read.cgi/hp/1134255607/
340323:2006/01/04(水) 19:59:55 ID:???
たくさんの回答ありがとうございます。
すべて試してみて一番わかりやすいのを参考にさせていただきます。
本当にありがとうございました。
341nobodyさん:2006/01/05(木) 04:32:22 ID:+yKIo2wf
CGI&Perlポケットリファレンスを見ながらスクリプトを書いています。
この本を見てて、cryptの暗号化のキー(第2引数ですかね?)は、2文字異常渡しても無視されますと書いてありました。
僕が、今手にして自分で解読してみてるスクリプトに以下のようなものがあったんですけど、(出所はちょっと忘れてしまいました)

$time=crypt($time,int(rand 100));


第2引数が100になることもあるということは、3文字だから無視されますよね?
これって、

$time=crypt($time,int(rand 99));

に書き換えた方がいいんですか?
342nobodyさん:2006/01/05(木) 09:52:45 ID:???
>>341
>>162-辺りで出ているがrand 100は0以上100"未満"なのでint(rand 100)が100を取る事は無い。
しかし整数そのまま放りこむのはsaltの強度が落ちるからあまり良いとは言えないなぁ

因みにニ文字以上が切り捨てられるという仕様は暗号化した物の頭ニ文字はsaltなのでこうやって使う
$crypted eq crypt($pass, $crypted)
343nobodyさん:2006/01/05(木) 10:00:36 ID:???
>>341
あ、無視の意味を勘違いしているようなので補足
無視されるのは余分な部分であって全体じゃないよ
abcdef -> a
100 -> 10
344nobodyさん:2006/01/05(木) 10:02:43 ID:???
Digest::SHA使え。
345nobodyさん:2006/01/05(木) 10:23:19 ID:???
>>344
それもSHA1じゃそろそろ怪しくなってきたね
今作るならSHA256か
346nobodyさん:2006/01/05(木) 17:26:03 ID:+yKIo2wf
>>343
レス感謝!

でも
abcdef -> a
の部分は

abcdef -> ab

じゃないの?2文字でしょ?
文字の場合は1字とかじゃないよね?
347nobodyさん:2006/01/05(木) 17:45:03 ID:???
>>346
ごめん
abcdef -> ab
が正解。いつの間にか消えてしまった
348nobodyさん:2006/01/05(木) 18:23:39 ID:+yKIo2wf
>>347
うおぉおぉおぉおおぉぉ!!
自分でちゃんと理解してたーーー!!
ウレシーーーー!!
マジで嬉しい!
>>347さん、本当にありがとうね!
あなたのお陰で、また1つ理解できました。

この感動を今の俺みたいな人に分けてあげたい。
頑張ろっと。
349nobodyさん:2006/01/05(木) 21:27:34 ID:???
> この感動を今の俺みたいな人に分けてあげたい。
> 頑張ろっと。

今時 Perl ができる人間なんて、腐る程いますよ。
350nobodyさん:2006/01/05(木) 21:34:34 ID:???
ここのスレタイの17バイト目から22バイト目までを音読しれ
351nobodyさん:2006/01/05(木) 23:39:25 ID:+yKIo2wf
>>349
その腐った人の中に入りたいです!

>>350
初心者。。。?
んー、ごめん。
どういう意味だったのか分からなかったんだけど^^;
352nobodyさん:2006/01/05(木) 23:56:20 ID:???
>>351
多分>>350>>349宛。君は天然か。
353nobodyさん:2006/01/06(金) 00:41:22 ID:???
たまによくわからん流れになるな
354nobodyさん:2006/01/06(金) 02:51:26 ID:???
DBIでPostgresqlを使ってるのですが、DBから取得したデータに一括して
utf8フラグつける方法ってあるでしょうか。

http://www.kt.rim.or.jp/~kbk/perl-5.8/perlunicode585.html

上記サイトにFetch関数というラッパーが紹介されてましたが、2002年の記事なので
現在はもっとスマートな方法があるのでしょうか。
355nobodyさん:2006/01/06(金) 03:28:04 ID:???
>>354
DBIのドキュメントに書いてあったと思われ
356nobodyさん:2006/01/06(金) 04:00:45 ID:iupFgDGk
>>352
すみません^^;
出来る人間にと書けば良かったです!
ご指摘ありがとう!

ここの人たちは優しい人が多いんですね!
ここの住人になりたいです!
357nobodyさん:2006/01/06(金) 04:50:15 ID:???
>>355
ありがとうございます。できたっぽいです。2日ググり続けました。
DBI->connectのオプションでpg_enable_utf8=>1で自動的にフラグがたつようです。
DBIのドキュメントにも見つけられなく、海外のどこの馬の骨とも分からない人の
ソースからパクッてきただけなので詳細はよく分かりません。詳しいサイトご存知
でしたら教えてください。
358nobodyさん:2006/01/06(金) 05:35:08 ID:???
pg_enable_utf8で検索したの?
359nobodyさん:2006/01/06(金) 05:51:05 ID:???
>>357
http://search.cpan.org/~dbdpg/DBD-Pg-1.43/Pg.pm
DBIのconnectの第四引数はDBDに渡されるのよ
各DBD固有のものはDBIのドキュメントをいくら読んでも載ってません
360nobodyさん:2006/01/06(金) 08:04:41 ID:???
ありがとうございます!
This attribute is experimental and may be subject to change.
とのことで、使ってる人も少ないんですね。
361nobodyさん:2006/01/07(土) 00:20:22 ID:???
マヌケな質問な気がするのですが…
sysopenのモードを変数で渡すことはできませんか?

use Fcntl;
my @mode = (O_RDWR,O_CREAT);

sysopen(FH,"file",@mode); #1
sysopen(FH,"file",join('|',@mode)); #2

などとやってみたのですがどうにも渡りません。
直接定数を決め打ちしたり、定数のリストを渡すとうまくいくのですが、配列を渡すとなぜかだめなようです。
検索してみても決めうちの例しかでていませんし、
perldoc sysopenというのもないようで詰まってしまいました…。
362nobodyさん:2006/01/07(土) 00:55:19 ID:???
>>361
my $mode = O_RDWR | O_CREAT;
363nobodyさん:2006/01/07(土) 00:55:27 ID:???
>>361
「|」 はビット演算子のorだ。だから文字列でjoinは見当違い。
O_RDWRとかは定数。試しにprintしてみな。

そんな事も知らずにsysopenをどう使うのか疑問だ。
364nobodyさん:2006/01/07(土) 01:16:56 ID:???
>>362,363
できました。どうもありがとう。

|がビット演算子というのを知りませんでした。
なんでこんな不思議な記号で区切るのか疑問でしたが、調べ方もわからなかったので為になりました。
リストで渡すと通ったのもO_RDONLYを使ったせいなようで、
展開されて「0256」になったせいで通ってしまったようです。

sysopenを使うのも、ただどこかのサイトで
「入出力を行うだけならばopenよりも安全だ」
というので盲目的に使ってしまっただけで深い意味はありません…。
365nobodyさん:2006/01/07(土) 03:12:37 ID:???
ActivePerl5.8.7を使用しています。

Net::FTPを使用して、多数のファイルをアップロードするスクリプトを作りました。
255個目のファイルまでは正常にアップロードできるのですが
256個目のファイルをアップロードする所でputがエラーを返し(0を返す)、正常に送れません。。
(FTPソフトを使えば問題なくアップロードできる)
何か心当たりがあれば、よろしくお願いします。

use Net::FTP;
$ftp = Net::FTP -> new($ftp_server);
$ftp -> login($ftp_id, $ftp_pass);
foreach (@filelist) {
  $ftp -> put($_);
}
$ftp -> quit;
366356:2006/01/07(土) 03:25:30 ID:hRPnI9VA
ここの住人になりたいなと思うので
コテハンにしようかなと思います。

何か名前を付けてくれませんか!!
367nobodyさん:2006/01/07(土) 03:27:45 ID:???
名無し or 死ね
368nobodyさん:2006/01/07(土) 03:27:55 ID:???
>>366
nobodyさん
369nobodyさん:2006/01/07(土) 03:37:32 ID:???
>>366
GOTOマスター
370nobodyさん:2006/01/07(土) 03:59:38 ID:???
>>366
天然
371nobodyさん:2006/01/07(土) 04:14:13 ID:snASfRD4
普通の文章なのに「!」で終らせることの出来る強い心をもっ人間に私はなりたい
372366:2006/01/07(土) 04:57:39 ID:hRPnI9VA
結構打たれ弱いのかも。。。
ちょっと凹み気味です。

あんましいぢめないで下さい!
373nobodyさん:2006/01/07(土) 05:18:10 ID:???
Perlメモ-改行コードを削除する
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Remove

この記事に

>複数の処理系の改行コードを想定しなければならない場合は、
>次のようにして文字列の最後の改行を削除します.

>s/\x0D?\x0A?$//;

とありますが、これを
s/\n$//;
としたらまずいですか?
374nobodyさん:2006/01/07(土) 05:44:52 ID:???
>>372
つかコテ名乗って良いことなんか何一つないぞ
375nobodyさん:2006/01/07(土) 05:47:04 ID:???
まずいです。
詳しくは2つ上の「改行コードを統一する」
376nobodyさん:2006/01/07(土) 05:47:41 ID:???
>>374
あぼーんできる。
377nobodyさん:2006/01/07(土) 12:34:39 ID:???
>>365
試してみたが上手く動いたぞ。ちなみに俺の環境は
ftp鯖: CentOS + vsftpd
ActivePerl5.8.7-build813 WindowsXP からアップロードする
ファイル数 512個 ファイル名は 1,2,3,....512で中身も1,2,3,...512
で、512個すべて問題なくうP可能

とりあえず出力がうざいが、
$ftp=Net::FTP->new($ftp_server, Debug => 1);
とでもしてみたらいいんでない?
378365:2006/01/07(土) 14:31:54 ID:???
>>377
試していただきありがとうごます。
エラー出力を頼りに調べた所、PASVモードを有効にすれば直るかも
http://www.perlmonks.org/?node_id=137654
ということで
$ftp = Net::FTP -> new($SET{'ftp_server'}, Passive => 1);
と変更したところ、256個目以降のファイルも正常にアップロードすることができました。
お手数掛けましたー。
379nobodyさん:2006/01/07(土) 18:44:49 ID:???
PerlのCGIでエラーをトラップする方法について教えてください。

エラーと見なされることが発生したら、エラー処理用のサブルーチンに飛んで、
エラーメッセージを表示して終了するようにしています。
その際、dieみたいにどこでエラーが発生したかも表示したいので、
引数でエラー内容と呼び出し元のサブルーチン名を渡しています。

&error('必須項目が未記入', 'submit') if (〜);

sub error {
  my ($msg, $where) = @_;

  print "Content-type: text/html\n\n";
  print "エラーが発生しました。$msg at $where\n";

  exit;
}

こんな感じです。ただ、これだと&errorを書くときにいちいちサブルーチン名を
指定する必要があって、面倒です。
何か良い方法はないでしょうか。それとも何か根本的に考え方が間違ってますか?
380nobodyさん:2006/01/07(土) 19:27:38 ID:???
381nobodyさん:2006/01/07(土) 20:47:01 ID:???
>>379
caller関数。
382nobodyさん:2006/01/07(土) 22:25:59 ID:7MUFvifm
htmlファイルを雛形としてそこから全行読み込んで一行ずつ検証し、行内に
<textarea name="comment1" cols="60" rows="10"></textarea>
という文字列が現れたらその文字列を
<textarea name="comment1" cols="60" rows="10">$comment1</textarea>
に置き換えてその行を出力するということを試みています (非該当行はそのまま出力)。
最単純に
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
とやってみましたが、「name=」を含めてその行のみのそれ以降の部分だけ出力されません (以降の行は出力されます)。
このとおり実行はされますが、エラー ログには「name は予約語となる可能性があります。あるいは、name の前にオペレータが抜けてはいませんか。」と残っています。
確かに、$name や $key などは perl で頻繁に使われる語ですが、上記のスクリプト内では $name を使っていませんし、それを使っているようなモジュールも明示的には使用していません。
また、「name=」自体は HTML のフォームに関する属性なので、これの名前を変更はできません。
ちなみに
$line =~ s|"comment1" cols="60" rows="10"></textarea>|"comment1" cols="60" rows="10">$comment1</textarea>|;

$line =~ s|<textarea \x6Eame="comment1" cols="60" rows="10"></textarea>|<textarea \x6Eame="comment1" cols="60" rows="10">$comment1</textarea>|;
もやってみましたが、まったく同じ結果に終わります。
推測するに、置き換え行自体に「name=」が現れたら NG のようです。
また、
if ($line =~ |^(.*)"comment1" cols="60" rows="10"></textarea>(.*)$|) {
$line = $1 . "\"comment1\" cols=\"60\" rows=\"10\">" . $comment1 . "</textarea>" . $2;
}
も NG です。
解決策をお願いします。
383nobodyさん:2006/01/07(土) 22:35:23 ID:7MUFvifm
$attr = "name";
としておいて
$line =~ s|<textarea $attr="comment1" cols="60" rows="10"></textarea>|<textarea $attr="comment1" cols="60" rows="10">$comment1</textarea>|;
としても駄目でした。
前投稿のとおり置き換え文字列には name= が入っていなくても駄目なので、結局、最終的にその行自体に name= があるとすべて駄目なようです。
完全に手詰まりです。
384nobodyさん:2006/01/07(土) 22:38:53 ID:???
>>382

わからん。周辺のコードも晒せ。
385 ◆TWARamEjuA :2006/01/07(土) 22:44:13 ID:??? BE:871924-
<textarea name="comment1" cols="60" rows="10">##comment1##</textarea>
こうしておいて、、、
s/##comment1##/$comment1/;
じゃだめなのかなぁ。。。

もしくは%sにしておいて、、、
sprintf $html_temp,$comment1;
とかとか。
386nobodyさん:2006/01/07(土) 22:44:54 ID:???
最悪
387nobodyさん:2006/01/07(土) 22:45:28 ID:???
日本語のエラーログを吐くの?
388nobodyさん:2006/01/07(土) 23:02:27 ID:???
>>382
つかエラーメッセージを意訳するな。そのまま書け。
389382-383:2006/01/07(土) 23:06:50 ID:5axJGSRV
>>385
駄目でした。置き換え文字列には含まれなくとも行自体に name= があると駄目なようです。
>>388
そのままです。
あとは、Perl のバージョンやパスが書いてあるだけです。
390nobodyさん:2006/01/07(土) 23:14:21 ID:???
エラー行は確かにその正規表現が書いてある行なんだよな?

あと悪いことはいわないから周りのコード晒せ。
見た感じループ内の処理みたいだからそのループ全体を。
391382-383:2006/01/07(土) 23:16:51 ID:5axJGSRV
>>384

open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html" . \n\n;
for ($i = 0; $i < @lines; $i++) {
$line = $line[$i];
#以下、前記のとおり
print $line;
}
exit 0;
392382-383:2006/01/07(土) 23:17:57 ID:5axJGSRV
× $line[$i]
○ $lines[$i]
393nobodyさん:2006/01/07(土) 23:18:37 ID:???
おいコラ
394382-383:2006/01/07(土) 23:27:41 ID:5axJGSRV
質問しておいてなんですが、周辺も載せましたが、結果を見るとやっぱり置き換えのところで何か起きているとしか思えないです。
395nobodyさん:2006/01/07(土) 23:29:19 ID:7SuLco6K
ふざけてやってるうちはいいけど、
最近真面目にそういうお馬鹿スクリプト書く初心者が増えてきたからねぇ…
396382-383:2006/01/07(土) 23:31:06 ID:5axJGSRV
テストなので、雛形 HTML のフォーム入力エレメントは今のところ textarea しかないのですが、input のフィールドも追加して検証してみようと思います。
397382-383:2006/01/07(土) 23:32:39 ID:5axJGSRV
どこがおかしいですか。初心者なのでわかりません。
398nobodyさん:2006/01/07(土) 23:34:23 ID:???
>>391
「初心者なので」というセリフは大嫌いだが、>>391をそのまま実行すると
print "content-type: text/html" . \n\n; でエラー。当然だがね。
399382-383:2006/01/07(土) 23:35:54 ID:5axJGSRV
すみません。

open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $line[$i];
#以下、前記のとおり
print $line;
}
exit 0;

でも先の問題は解決されません。
400382-383:2006/01/07(土) 23:36:41 ID:5axJGSRV
本題の解決策をお願いします。
401nobodyさん:2006/01/07(土) 23:37:43 ID:???
>>399
こっちでは再現しないけど。「前記の通り」とかじゃなくてフルに書いてみ?
あとPerlのバージョン含めた実行環境も。
402382-383:2006/01/07(土) 23:41:59 ID:5axJGSRV
#!/usr/local/bin/perl

$comment1 = "";
open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $lines[$i];
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
print $line;
}
exit 0;

駄目。

#!/usr/local/bin/perl

$comment1 = "test";
open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $lines[$i];
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
print $line;
}
exit 0;

これも駄目です。
template.html の内容と印刷結果は載せなくても大丈夫ですか。
403nobodyさん:2006/01/07(土) 23:42:28 ID:???
というか何を隠そうとしてるのかしらないけど、「そのまま」ここに張りつけてみな。
そうすれば直ぐに答えがかえってくるんだから。
404382-383:2006/01/07(土) 23:44:11 ID:5axJGSRV
Perl バージョン:

これは perl, v5.6.1 built for i386-linux です
405382-383:2006/01/07(土) 23:46:11 ID:5axJGSRV
>>403
>>402 に書いたのは全行です。
テストなので、これだけしか書いていません。
これだけしか書かないうちに先の不都合が見つかりました。
もっとも、最終的にやろうとしていることはありますが、それらはまだ書いていません。
この問題の解決が先なので。
406nobodyさん:2006/01/07(土) 23:47:27 ID:???
もしや置き換え該当行は下から一行目?
407382-383:2006/01/07(土) 23:48:07 ID:5axJGSRV
もう一度そのまま貼り付け。

#!/usr/local/bin/perl

$comment1 = "";
open(TEMPLATE, "./template.html");
@lines = <TEMPLATE>;
close(TEMPLATE);
print "content-type: text/html\n\n";
for ($i = 0; $i < @lines; $i++) {
$line = $lines[$i];
$line =~ s|<textarea name="comment1" cols="60" rows="10"></textarea>|<textarea name="comment1" cols="60" rows="10">$comment1</textarea>|;
print $line;
}
exit 0;
408nobodyさん:2006/01/07(土) 23:48:16 ID:???
>>402
前者も後者も正常に実行できている。ソースを見てもスクリプトの問題とは思えない。
エラーの出方から見てえらく特殊な環境で実行しているようにしか思えない。
perlバージョンだけでなく、OSのバージョンも。
409382-383:2006/01/07(土) 23:50:31 ID:5axJGSRV
>>406
「雛形の」という意味ですか。
であれば、違います。
雛形で言えば、該当行の下には
</form>
</body>
</html>
などの行もあります。
410nobodyさん:2006/01/07(土) 23:50:41 ID:???
つかエラーログって何?
コマンドラインで実行できないの?
411382-383:2006/01/07(土) 23:56:08 ID:5axJGSRV
雛形 HTML の内容は要らないですか。
412nobodyさん:2006/01/07(土) 23:57:20 ID:???
>>411
貼りたきゃ勝手に貼れ。それより>>408の質問に答えろ。
413nobodyさん:2006/01/07(土) 23:58:01 ID:???
>>410にもねー
414382-383:2006/01/07(土) 23:58:04 ID:5axJGSRV
OS バージョン:

Red Hat Linux 7.2 2.96-118.7.2
415382-383:2006/01/08(日) 00:00:24 ID:0I8ISceR
エラー ログは設置した覚えはないですが、自動的に書庫化されているようです。
日ごとに書庫化されています。
スクリプトを実行するたびに書庫にログが追加されています。
416nobodyさん:2006/01/08(日) 00:01:40 ID:???
>>415
RedHat7.2+perl5.6.1で「コマンドライン実行」した結果は?
「name は予約語となる可能性があります。あるいは、name の前にオペレータが抜けてはいませんか。」
なんて表示が日本語で出てくるわけじゃないよな?
417382-383:2006/01/08(日) 00:02:34 ID:0I8ISceR
勝手に貼れということはあまり参考にならないということのようなので、やめておきます。
必要なら言ってください。
418382-383:2006/01/08(日) 00:03:30 ID:0I8ISceR
>>416
FAQ に「当サーバではコンソールの使用を認めておりません。」とあります。
参考になりますか。
419nobodyさん:2006/01/08(日) 00:04:11 ID:???
>>418
氏ね
420382-383:2006/01/08(日) 00:05:19 ID:0I8ISceR
>>419
どういうことですか。
421nobodyさん:2006/01/08(日) 00:10:14 ID:???
情報の後出しが多すぎるな。実行環境とかレン鯖だったことは最初に言うものだが。
あと自作CGIはローカルに実行環境を持って、そこでテストしてからレン鯖に持っていくのが常識。

で、結論から言うと>>402のスクリプトに異常はない。これでエラーが出てるなら
perl以外の問題である非常に高い。レン鯖の名前を出せるようなら、親切な人が
検証してくれる可能性もあるが。
422nobodyさん:2006/01/08(日) 00:10:29 ID:???
通りすがりだが、自分のPCで試さないでサーバでテストするって・・・
市ねってことでしょ。まさか自分のPCにPerlも入れてない?
423nobodyさん:2006/01/08(日) 00:11:03 ID:???
まぁ精々KENTでも見習って適当にやってくれ。
424nobodyさん:2006/01/08(日) 00:18:25 ID:???
ここは回答者も初心者ですね
425nobodyさん:2006/01/08(日) 00:22:07 ID:???
「情報の後出しが多い」と言われて先にいろいろ書くと「長い」「ごちゃごちゃ書くな」と言われる
初心者回答者は答えられない言い訳を質問者に転嫁することが多いですね
426nobodyさん:2006/01/08(日) 00:22:27 ID:???
Perlコーディング初心者(が)質問(に答える)スレ Part 45

ですが何か?
427nobodyさん:2006/01/08(日) 00:28:21 ID:???
ガッテン!ガッテン!
428nobodyさん:2006/01/08(日) 00:29:43 ID:???
まぁ、初心者同士の互助会ってことだな
429nobodyさん:2006/01/08(日) 00:31:48 ID:???
初心者でも達人でも>>382-383に答えられないのはいっしょだがな。
430nobodyさん:2006/01/08(日) 01:01:05 ID:???
>>424-428
じゃあ答えてやれよ
431nobodyさん:2006/01/08(日) 01:14:47 ID:???
初心者の質問に答えられない達人ぶった初心者が多いスレはここだと聞いてやってきました
432nobodyさん:2006/01/08(日) 01:17:17 ID:???
環境依存の問題に答えようがあるかい
433382-383:2006/01/08(日) 01:17:38 ID:???
>>431
急いでいます。教えてください。
434nobodyさん:2006/01/08(日) 01:17:57 ID:???
達人って……小学生かよ
435nobodyさん:2006/01/08(日) 01:18:14 ID:???
というか >>421 が答えだよね。いまんとこ
436382-383:2006/01/08(日) 01:27:57 ID:???
誰も答えられないのですか?
437nobodyさん:2006/01/08(日) 01:28:59 ID:???
>>436
>>432
あと騙りじゃないならID出せ。
438nobodyさん:2006/01/08(日) 01:46:42 ID:???
「環境依存」と来たか
ID出してもどうせだれも答えられないんだからID出すこと自体無意味
439nobodyさん:2006/01/08(日) 01:48:20 ID:???
421=435
初心回答者は自画自賛もお手の物です。
440nobodyさん:2006/01/08(日) 01:51:53 ID:???
ところが>>421以外の回答が出てこない。何故だろう。
441nobodyさん:2006/01/08(日) 01:53:13 ID:???
' ' => '\s'
442nobodyさん:2006/01/08(日) 01:58:25 ID:???
ちなみに、空文字のかわりに空白を入れるなんて邪道は嫌です。
443nobodyさん:2006/01/08(日) 02:00:29 ID:???
つーか
スペースじゃなくて文字が入っていても結果が同じだと言ってるのだから何の解決にもならない
二つスクリプト貼ってるだろ
よく読め
ボケカス
444nobodyさん:2006/01/08(日) 02:08:37 ID:???
ぅはwwwww
俺ンとこでも再現した!
445nobodyさん:2006/01/08(日) 02:09:04 ID:???
nameが評価されてるだろ

エラーメッセージ嫁
446nobodyさん:2006/01/08(日) 02:16:12 ID:???
テンプレート
<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>
      </FORM>
   </BODY>
</HTML>

実行結果
<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA
      </FORM>
   </BODY>
</HTML>
447nobodyさん:2006/01/08(日) 02:17:07 ID:???
>>445
堂々巡りの阿呆だな
解決策を書けよ
448nobodyさん:2006/01/08(日) 02:20:40 ID:???
KENT様を見習ってヒアドキュメントでも書かれたらいかがですか?
449nobodyさん:2006/01/08(日) 02:21:31 ID:???
>>446
エラーメッセージ何て出てる?
450nobodyさん:2006/01/08(日) 02:22:59 ID:???
出ねーよ
モノは出力されてんだから
シェルからでも同じ
451nobodyさん:2006/01/08(日) 02:24:05 ID:???
>>450
実行環境plz
452nobodyさん:2006/01/08(日) 02:24:42 ID:???
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA
      </FORM>
   </BODY>
</HTML>
453nobodyさん:2006/01/08(日) 02:25:33 ID:???
というか、こんな横暴な質問者を助けるんだ…。
みんな優しいのな。
仕事なら自分で解決しろとしか俺は言わんが。
454nobodyさん:2006/01/08(日) 02:26:06 ID:???
perl 5.6.1
fedora core 4
455nobodyさん:2006/01/08(日) 02:26:13 ID:???
FreeBSD4.11+perl5.8.1では再現しない。スクリプトもテンプレもEUC。
content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <textarea name="comment1" cols="60" rows="10">test</textarea>
      </FORM>
   </BODY>
</HTML>
456nobodyさん:2006/01/08(日) 02:27:15 ID:???
初心者ほど猿のように実行環境はなんだOSはなんだと質問する
いったいおまえらにバージョンの差異がわかるのかと(ry
457nobodyさん:2006/01/08(日) 02:27:26 ID:???
>>453
質問者が仕事じゃないときの答えられないお前の言い訳は?
458nobodyさん:2006/01/08(日) 02:28:27 ID:???
>>456
再現する環境としない環境がある以上は聞かなきゃ仕方がないだろ。
459nobodyさん:2006/01/08(日) 02:31:00 ID:???
どうして「しかたがない」のやら……まったくもって頭の良い御方の発言は理解できませぬ
460nobodyさん:2006/01/08(日) 02:31:27 ID:???
冬休みいつまでだよ
461nobodyさん:2006/01/08(日) 02:31:58 ID:???
>>459
>>458見てわからんようじゃ相当頭悪いなお前
462nobodyさん:2006/01/08(日) 02:32:15 ID:???
$comment1 = ""; # の場合
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA
      </FORM>
   </BODY>
</HTML>

$comment1 = "test"; # の場合
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA
      </FORM>
   </BODY>
</HTML>
463nobodyさん:2006/01/08(日) 02:32:30 ID:???
で、原因と解決策はいつ出てくるのかね?
464nobodyさん:2006/01/08(日) 02:33:42 ID:???
ActivePerl5.6.1でも再現しねーな。なんだこりゃ?
465nobodyさん:2006/01/08(日) 02:34:07 ID:???
それこそ解らないやつが聞いても仕方がないわけだが。

というかこいつらのデバッグってただ流せれば終わりなの?
466nobodyさん:2006/01/08(日) 02:35:39 ID:???
それがKENTクオリティ
467nobodyさん:2006/01/08(日) 02:35:41 ID:???
>>465
遠まわしに言っても理解できないから単刀直入に結論をどーぞ
468nobodyさん:2006/01/08(日) 02:35:45 ID:???
試行置換文
$line =~ s|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|<TEXTAREA name="comment1" cols="60" rows="10">$comment1</TEXTAREA>|;
$line =~ s|comment1" cols="60" rows="10"></TEXTAREA>|comment1" cols="60" rows="10">$comment1</TEXTAREA>|;
どっちでもダメだわこりゃ
469nobodyさん:2006/01/08(日) 02:37:44 ID:???
@FOO=<>;
するぐらいならヒアドキュメントのほうがどれだけいいことか。
470nobodyさん:2006/01/08(日) 02:38:01 ID:???
評価部分にはnameがなくっても$lineにあるなら同じようになるようだ
471455:2006/01/08(日) 02:38:25 ID:???
>>468
こちらではどっちも問題ない。
472nobodyさん:2006/01/08(日) 02:38:56 ID:???
>>469
質問者の前提条件をひっくり返してしまってよいなら誰でも答えられるがなアンタ
473nobodyさん:2006/01/08(日) 02:40:19 ID:???
textareaじゃなくてinput type=text name=...で試してくれんか
474nobodyさん:2006/01/08(日) 02:41:38 ID:???
これ以上なく単純明快な形で既に解決策が提示されているものを猿が罵倒した件について。
475455:2006/01/08(日) 02:42:47 ID:???
>>473 普通に置換できてる。つか当たり前っちゃ当たり前。
476nobodyさん:2006/01/08(日) 02:43:14 ID:???
>>469
あの質問ではあんなテンプレートあってもなくても意味がないような気がするが
のちのちの完成形ではテンプレートを読み込むというのが絶対条件なら
くずせないだろ、バカチン
477nobodyさん:2006/01/08(日) 02:44:46 ID:???
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <INPUT type=text
      </FORM>
   </BODY>
</HTML>
478nobodyさん:2006/01/08(日) 02:45:40 ID:???
KENT様を見習え。バカチン!
479nobodyさん:2006/01/08(日) 02:45:47 ID:???
>>474
解決策などありませんでした
ありませんでした
ありませんでした
480nobodyさん:2006/01/08(日) 02:47:04 ID:???
requireやuseしていない組み込みモジュールに$nameがあると見た!
481nobodyさん:2006/01/08(日) 02:47:22 ID:???
赤帽系のperlが変ってこと?
482nobodyさん:2006/01/08(日) 02:48:48 ID:???
>>480
仮にそんなことがあるとしてもそんなことが判明しても解決にならない。
formのnameが別の名前に置き換えられないんだから。
483nobodyさん:2006/01/08(日) 02:50:03 ID:???
そこらへんのHTTPデーモンにはエラーログを日本語で出力してくれるものがあるの?
484nobodyさん:2006/01/08(日) 02:50:31 ID:???
フォームでは「name/value」しか使えないのケ?
485nobodyさん:2006/01/08(日) 02:52:10 ID:???
>>483
アーカイブ化されてるつってんだからレンタル屋がraw->日本語処理スクリプトも置いてんだろ
486nobodyさん:2006/01/08(日) 02:53:22 ID:???
もうこいつら頭良すぎ(w
全然付いていけない。

オヤスミナサイ。
487nobodyさん:2006/01/08(日) 02:53:57 ID:???
>>486
逃げたwww
488nobodyさん:2006/01/08(日) 02:54:28 ID:???
daemonのエラーログには何にも残ってねーな
つーかエラーじゃないし
489nobodyさん:2006/01/08(日) 02:55:40 ID:???
何の役にも立たない>>486の捨て台詞カッコイイぜ
490nobodyさん:2006/01/08(日) 03:03:25 ID:???
再現したって言う奴、これどうよ?
$line =~ s|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|<TEXTAREA name="comment1" cols="60" rows="10"></TEXTAREA>|;
491nobodyさん:2006/01/08(日) 03:08:21 ID:???
ああ
それも試したんだわ
これも試した↓
$line =~ s|comment1" cols="60" rows="10"></TEXTAREA>|comment1" cols="60" rows="10"></TEXTAREA>|;
結果
Content-type: text/html

<HTML>
   <BODY>
      <FORM action="" method=POST>
         <TEXTAREA
      </FORM>
   </BODY>
</HTML>

どうやらこうやら$lineがnameを含有していて評価部分にnameがあろうとなかろうと$lineを評価してしまうとダメらしい
$lineを評価なしにそのままprintしたときだけテンプレートのすべてがprintされる
492nobodyさん:2006/01/08(日) 03:11:21 ID:???
>>491
仮にそれがperlのバグだとしても今まで出てこなかったのが変だよなー
493nobodyさん:2006/01/08(日) 03:15:59 ID:???
>>492
再現しない環境があるんだから
それが大多数ならおかしくないな
perlやosの種類・バージョン・リビジョンの組み合わせは星の数だ
494366:2006/01/08(日) 04:52:43 ID:ekOfQHSy
>>374
そうなんですか!?知りませんでした。
ご親切にありがとうございます!

質問していいですか?
「data.txt」 という何か書き込みされている テキストファイルがあるとして
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
という感じに書き込みした順番付けをしてあって、順番は1から始まる数字なんですが

このスクリプト4行目の「$_」には、行番号がセットされているんですか?
@arrというのは、どの部分を指しているんでしょうか?

CGI&Perlポケットリファレンスには、「$_」は特殊変数と言う事位しか触れられていません。
@arrというのは、「ただのarrという名前の配列」と理解してるんですが、これは大間違いですかね?
495nobodyさん:2006/01/08(日) 05:04:36 ID:Pbsz8/Oh
4行目は改行が削られたデータ
$numは要素の数が入る

最後の行、その他の解釈の仕方があればそれを知りたい
496nobodyさん:2006/01/08(日) 05:08:26 ID:???
>>494
「array(配列)」を略しただけだと思う。つかそのくらい想像せい。
497366:2006/01/08(日) 05:15:05 ID:ekOfQHSy
>>374
そうなんですか!?知りませんでした。
ご親切にありがとうございます!

質問していいですか?
「data.txt」 という何か書き込みされている テキストファイルがあるとして
open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
という感じに書き込みした順番付けをしてあって、順番は1から始まる数字なんですが

このスクリプト4行目の「$_」には、行番号がセットされているんですか?
@arrというのは、どの部分を指しているんでしょうか?

CGI&Perlポケットリファレンスには、「$_」は特殊変数と言う事位しか触れられていません。
@arrというのは、「ただのarrという名前の配列」と理解してるんですが、これは大間違いですかね?
498494:2006/01/08(日) 05:52:31 ID:ekOfQHSy
>>495
早速のアドバイスありがとうございます!
...と言うことは、例えば「date.txt」の中身が
山田太郎,[email protected],\n
鈴木花子,[email protected],\n
佐藤次郎,[email protected],\n
だった場合、具体的に言うと「$_」の最初は
「山田太郎,[email protected]」で、2番目に
「鈴木花子,[email protected]」が来て、3番目に
「佐藤次郎,[email protected]」という順番でセットされていく訳ですか?(ただ\nが抜けただけ?)

これが、@arrにセットされていく訳だから@arr[0]は【山田太郎,[email protected]】という理解なんですがOKですかね?
その後の、「$num = @arr;」という処理の仕組みが詳しく説明できないのですが、
結果は【山田太郎,[email protected]】は【山田太郎,[email protected],1】となっています。
>>495さんは【$numは要素の数が入る】と言われてますが、もう少し噛み砕いてもらえないでしょうか?
「$num」には、「@arr」からどんなデータが渡されているのでしょうか?
499nobodyさん:2006/01/08(日) 05:59:48 ID:???
>>498
非常に痛々しいが答えてあげる。

「$_」の中身が知りたければprintしなさい。
pushの解釈はそれでおk。
「$num = @arr;」は@arrの要素数、つまり>>498の例の場合は3が入る。
これ以上噛み砕きようがない。その後で1足してるけど意図は不明。

つか書いたのお前だろうがよ。
500nobodyさん:2006/01/08(日) 06:00:39 ID:???
>>498
printすりゃいいだろ。
少しくらい自分で解決できるようになれ。
あと関数の意味くらい調べろ。
501498:2006/01/08(日) 06:08:00 ID:ekOfQHSy
間違えてました!

10行目の
@arr[0]は【山田太郎,[email protected]】は、
$arr[0]は【山田太郎,[email protected]】でした!書き間違えてました!

もう一つ補足です。
僕の中ではまだ仮定なのですが、
「$num = @arr;」という処理は、「@arr」の中身を順番に「$num」に渡す。
「@arr」には3つの変数がセットされていて、それぞれ

「山田太郎,[email protected]
「鈴木花子,[email protected]
「佐藤次郎,[email protected]

そんでもって、それらの名前は「$arr[0]」、「$arr[1]」、「$arr[2]」となると。
>>495さんが言ってた【$numは要素の数が入る】の【要素の数】とは、
「$arr[0]」の「0」の事だったんですかね!

だから、「$num = @arr;」の処理をすると、「1」、「2」、「3」になってる!
と考えれば納得できますけど、この仮定は合ってます?やっぱりダメですか?
502nobodyさん:2006/01/08(日) 06:11:00 ID:???
>>501
print $num; してみ? 答えが出てくるから。
503nobodyさん:2006/01/08(日) 06:16:30 ID:???
そろそろ放置しないと、このレベルのガ湧き出すぞ
504nobodyさん:2006/01/08(日) 06:17:27 ID:???
いいんじゃね? 初心者スレだし。
505nobodyさん:2006/01/08(日) 06:18:55 ID:???
ID:ekOfQHSyは初心者以前にバカだがな。
506501:2006/01/08(日) 06:42:29 ID:ekOfQHSy
さっきのdata.txtで

#!/perl/bin/perl
require "jcode.pl";
print "Content-type: text/html\n\n";

open(F,"data.txt");
while(<F>){
chomp;
push(@arr,$_);
}
close(F);
$num = @arr;
$num += 1;
print $num;

をやったら、「4」が出ました!
>>499さんが「3」が入るの意味が分かりました!
みなさん、僕のレベルが低くてすみませんでした。
でも、ありがとうございました!

CGI&Perlポケットリファレンスはお勧めだと言われて買ったんですけど、基本と言うか仕組みと言うか、その辺を分かった上で使う物みたいな気がします。
ただ、僕のレベルが低いだけかもしれませんけどね。

やっぱり、perlやphpってのは本だけでやるものじゃなくって、ちゃんと学校行って勉強するべきなんですかね?

>>503
早くこのレベルから抜け出たいです!>>503さんはどれくらいの経歴の持ち主なんですか??やっぱり何年もされてるんですか?
507nobodyさん:2006/01/08(日) 06:53:18 ID:???
>>506
ネットの情報だけでも一週間あればBBSくらい作れるやつはゴロゴロしてる。
逆に学校で習っても全然理解できないやつもゴロゴロしてる。

要は素質の問題。素質の差を埋めるのは勉強の仕方と、知識を求める意欲。
508nobodyさん:2006/01/08(日) 07:03:07 ID:???
>>506
安易に2chに頼るヤシは成長しない。
悩んで悩んで悩みぬいてのちに来なさい。

それと、馴れ馴れしくしないでくれるかな?
お前と茶飲み話をするためにここにいるんじゃないんだから。
509506:2006/01/08(日) 07:14:08 ID:ekOfQHSy
>>507
簡単な掲示板やスケジュール表は作ったりしました!

最初は、本も買ってなかったのでネットで勉強していました。そこで、配布されてたスクリプトを試して、こんな感じにしてみたいなと思ったら少し書き換えて遊んだりしていました。
なので、自分で1から作ったりは出来ませんでしたが、ほんの少しずつ「なんだか、何か分かんないんだけど、何かが分かってきたような気」がしてごくごく簡単なスクリプトを書いてみたら、
Internal Server Errorと何回も何回も出てきて悔しかったですが、やっと画面に文字が出てきた時はかなり嬉しかったんです!!

僕は、プログラムなんて向いてないだろうし、どうせ出来ないんだから...
と思っていたので余計に嬉しかったです!興奮して眠れませんでした!

>>507さんが学校で習っても全然理解できないやつもゴロゴロしてるというのは想像もつきませんが
恥ずかしいけど、僕には学校に行く余裕も無いのでネットと本で勉強して、自分が作りたいようなプログラムなら出来るくらいにはなりたいです。
でも、いつかちゃんとした設計の仕方とかも覚えてみたいので、まずは今の自分が出来ることからやってるという段階です。

>>507さん、みなさん、色々親切にしてくれてありがとうございます。
正直、僕程度のレベルじゃみなさんの邪魔になるだろうし、野次られても全然構いません。
これからはちゃんと自分で調べれることは調べてみてから相談します。無視はこたえるので、野次でも何でも良いから教えてくれたら嬉しいです!!
ありがとうございました。
510506:2006/01/08(日) 07:24:11 ID:ekOfQHSy
>>508
>安易に2chに頼るヤシは成長しない。
>悩んで悩んで悩みぬいてのちに来なさい。
はい。基本がなっていない為、最初は、数多いかもしれませんが
理解して、ここに来る回数は減らします。努力します。

>それと、馴れ馴れしくしないでくれるかな?
>お前と茶飲み話をするためにここにいるんじゃないんだから。
ごめんなさい。
511nobodyさん:2006/01/08(日) 07:31:42 ID:???
よし、じゃあID:ekOfQHSyはコテハンを名乗ることを許す。
512506:2006/01/08(日) 07:34:13 ID:ekOfQHSy
>>511
ありがとうございます。
でも、前に親切な人がコテハン使っても良いこと無いって......??
言われたままに納得してましたが、そうなんですか?
513nobodyさん:2006/01/08(日) 07:41:01 ID:???
>>512
気にするな。名乗りたいという気持ちが大事。
つかすぐに他人の言動に左右されるな。意思を強く持て。
514512:2006/01/08(日) 07:47:55 ID:ekOfQHSy
>>513
じゃあ、コテハン名乗りたいです!
というか、ここでのコテハンを持ちたいんです。ここの住人になりたいと思ったから!



よかったら、僕に命名してくれませんか




515nobodyさん:2006/01/08(日) 07:58:23 ID:???
>>514
山田太郎、鈴木花子、佐藤次郎 好きなものを選べ
516nobodyさん:2006/01/08(日) 08:03:52 ID:???
皆暇なんだな…。

>>514
ゲーム脳、ゆとり教育、5才児 好きなものを選べ
517nobodyさん:2006/01/08(日) 08:17:21 ID:???
朝見てみれば、何この流れ。

「ここの回答者は初心者ばかり」って言っていたやつは、
初心者以下だったことがはっきりしたのは収穫だったけど。
518nobodyさん:2006/01/08(日) 09:48:09 ID:???
伸びてると思ったら、なにこれ…(;´Д`)
519nobodyさん:2006/01/08(日) 11:38:52 ID:???
VIPから沸いて出たうんこだよ
520nobodyさん:2006/01/08(日) 12:52:37 ID:???
伸びてると思ったら・・(略
521nobodyさん:2006/01/08(日) 13:15:22 ID:Pbsz8/Oh
>516
暇ってよりも、みんなはNGワード登録したいだけなんじゃないかなとw
522nobodyさん:2006/01/08(日) 13:45:54 ID:???
>>510から雑談になってるぞ
523nobodyさん:2006/01/08(日) 22:08:51 ID:???
ここ雑談スレだし
524nobodyさん:2006/01/08(日) 22:52:11 ID:???
こんなスレが底の方にあったよ。長引きそうな時は
移動してもらえると有り難い。

自分の作ったCGIスクリプトをデバッグするスレ
http://pc8.2ch.net/test/read.cgi/php/1011174442/


>>523
【総合】 Webprog板質問雑談スレッド 1
http://pc8.2ch.net/test/read.cgi/php/1131016915/

業界談義、愚痴はプログラマ板へどうぞ。
http://pc8.2ch.net/prog/
525nobodyさん:2006/01/08(日) 23:06:59 ID:Uz3qgn+x
例えばなのですが、
A.cgiで入力した出力結果(たとえばヘローワールドとか)を
B.htmlの中に埋め込んで表示したい場合、って
どうやって表示させるのでしょうか?

A.cgi→B.cgiに表示させるのは判るのですが・・・
526nobodyさん:2006/01/08(日) 23:08:46 ID:???
ssi
527nobodyさん:2006/01/08(日) 23:14:20 ID:???
ログに吐く→ログを読んでB.htmlを作成→B.htmlへ移動


(゚∀。)
528nobodyさん:2006/01/08(日) 23:17:56 ID:???
iframe
529 ◆TWARamEjuA :2006/01/08(日) 23:21:30 ID:??? BE:5880896-
B.htmlをテンプレートにしちゃうとか。
530nobodyさん:2006/01/08(日) 23:56:33 ID:Pbsz8/Oh
>529のが理想的
531514:2006/01/09(月) 00:40:09 ID:YG2ddn0l
戻りました。
初心者の質問スレなので、スレ違いの発言は避けます。すみません。
532nobodyさん:2006/01/09(月) 00:42:41 ID:Exqn7RF4
>531
その書き方だと「僕は初心者じゃ有りません」ってなっちゃうぞ!
あっ!初心者にも達してないってことなのか!
すみませんでした!!
533nobodyさん:2006/01/09(月) 00:43:12 ID:???
VIPから出てこないでね
534nobodyさん:2006/01/09(月) 00:59:21 ID:DuxY6YkJ
でもEk君素直でいい子だよ。
自分で調べなさすぎるけど。
535531:2006/01/09(月) 01:39:57 ID:YG2ddn0l
>>532
あっ、いやそうじゃなくてですね。
僕は初心者には違いありません。
ただ、余計なことを書き過ぎたので必要以上の私語は慎みますと言う意味です。
536531:2006/01/09(月) 01:58:24 ID:YG2ddn0l
早速なんですが、僕は自分の理解が正しいのか間違っているのか正確な解答を知りません。
そこで、僕の理解が正しいのかだけ答えてもらえませんか?

フォームで入力したものをcgiファイルに渡して、それを変数に入れて使うとき
$i=$FORM{'i'};とか、$FORMが$inになってるものとか、$i=$cgi->param('i');みたいなのとかありますよね。
3番目が別物と言うのは何となく分かるんですが、1番目と2番目もやはり違うものどうしですか?
537nobodyさん:2006/01/09(月) 02:57:25 ID:???
$FORMや$in、$cgiがどうやって生成されているか見てきて下さい><
前者の二つはcgi-lib.plを使って後者はCGI.pmを使っていると見受けられます。
538nobodyさん:2006/01/09(月) 03:41:58 ID:???
初心者より低いレベルのやつがおるな
539536:2006/01/09(月) 05:18:37 ID:YG2ddn0l
>>537
ありがとうございます。

>前者の二つはcgi-lib.plを使って後者はCGI.pmを使っていると見受けられます。
と言う点については、理解しています。(cgi-lib.plやCGI.pmの説明は出来ませんけど^^;)
僕が分からなかったのは、$FORMと$inについてで
両方ともcgi-lib.plをrequireしていますよね?んでも、違う変数にセットしている。と言うのがいまいち理解に苦しんでいたんです。
この2つ(もっとあるのかもしれませんが)を使い分けるような必要性があるから作られていると思うのですが、それはどんな時なのでしょうか?
540nobodyさん:2006/01/09(月) 05:22:52 ID:???
>>539
cgi-lib.plの中身を見れ。すぐわかる。
そういうことしようとしないですぐ聞いちゃうから呆れられるんだよ。
541nobodyさん:2006/01/09(月) 05:29:28 ID:uNKy5Wkj
>539
for ループを使うときに $i を使う人と $j を使う人が居る
配列に @list を使う人と @arr を使う人が居る
ただそれだけ
難しく考えすぎ
542539:2006/01/09(月) 06:12:11 ID:YG2ddn0l
>>540
すみません。読もうとしたことはあったんですが、正直、全く読めず僕にはまだ早いのかもと諦めていました。T_T
でも、それも読むべきなんですね。果てしない道のりですね。
ご指摘、どうもありがとうございました!

>>541
そうなんですかー。
あまり難しく考えないで良いとわかって良かったです!
少しずつ、基礎の基礎が分かるようになって行けば、基礎の段階に進めるので
地道に頑張ります。
543nobodyさん:2006/01/09(月) 09:38:58 ID:DuxY6YkJ
>>542
君ひどすぎるよ。
わからんところがあったら自分で少しは調べろよ。自分で少しは考えろよ。

まず、「Perl 入門」でもググって、Perlの基礎を勉強しろよ。

「初心者以下」っていわれるのはそれすらしてないからだろうが。
しましたとかいうなよ。実際君は基礎的な構文すら理解してないんだから。
わかったら>>1>>7読め。
544nobodyさん:2006/01/09(月) 12:25:25 ID:???
もうこのスレだめかもわからんね
545nobodyさん:2006/01/09(月) 12:51:17 ID:???
Win-XpのコンソールでPerlのコマンドラインスクリプト書くとき、
unixの
perl -e 'print $var, "\n";'
をどう書いたらいいでしょうか。
NG: perl -e "print $var, \"\n\";"

546nobodyさん:2006/01/09(月) 13:21:44 ID:???
NG: perl -e "print $var, \"\n\";"
547nobodyさん:2006/01/09(月) 13:39:16 ID:???
perl -e "print $var, qq{\n}"
548nobodyさん:2006/01/09(月) 13:43:05 ID:???
>>546
ども。
あれ、それででけた。さっき、だめだったのは何かの間違い。
でも、やっぱcmd.exeでは、かなり面倒ですね。
549nobodyさん:2006/01/09(月) 13:43:57 ID:???
>>547
あ、そんな手もありましたか。どうもです。
550nobodyさん:2006/01/09(月) 16:33:02 ID:???
50 くらい上の form の話って、 HTML::FillInForm とか
知ってれば悩まなくてよかったのにね。
551nobodyさん:2006/01/09(月) 23:08:44 ID:???
>>545
copalって知ってる? 便利やよ。
ttp://homepage1.nifty.com/kaityo/copalpro/
552nobodyさん:2006/01/10(火) 03:27:54 ID:j2HoU23f
こんばんは!
プログラムは面白いです。今まで嵌っててここに挨拶に来るのも忘れてました。

>>543
ご指摘ありがとうございます!!
今の僕じゃ何も言えないので、お言葉、だまってありがたく頂戴します。

>>all
あの、ここは初心者の質問スレということなので僕にとって知りたい事を質問させて頂いてたつもりだったんですが
どのレベルなら許されますか?
553nobodyさん:2006/01/10(火) 04:05:08 ID:???
お前をつきっきりで介護するスレじゃねえってことだよ。
554nobodyさん:2006/01/10(火) 04:15:56 ID:NnDCxprG
>>552
関数を全部覚えろとは言わない。
多用される関数・構文ぐらいは覚えた上での質問を。

とりあえずリファレンスは手元に置いておいたほうがいい

個人的には技術評論社が好き
555nobodyさん:2006/01/10(火) 04:36:29 ID:???
>>552
ここは「知りたいことを質問する場」じゃなくて
「初心者じゃ手に負えないこと」を質問する場所。

お前のように試行錯誤もしないで疑問を片っ端から
垂れ流す場所じゃ無いってこと。つかお前何歳?
556nobodyさん:2006/01/10(火) 05:40:00 ID:???
ってか、皆スルーすべき。かまってあげすぎ。
スルーされることによって、どういう質問なら適切か、答えが返ってくるかって覚えていくもんだろ?

>>555
>つかお前何歳?
思わず笑っちまったがこの質問は無いだろうw
何歳だったら良いって問題じゃないっつーか。
この質問が既に話を聞いてあげる姿勢の現れっつーか。
深みに嵌りかけてますぞ
557nobodyさん:2006/01/10(火) 05:48:20 ID:???
>>556
どう見ても皆ネタとして遊んでいるだけ。深読みしすぎ。
558nobodyさん:2006/01/10(火) 09:25:04 ID:j2HoU23f
unshiftを使った構文を使いたいので、まずサンプルで試していたのですが
unshift(@hoge, splice(@huga, 1, 1));

@hugaの1番目だけを、@hogeの先頭にくっつけたいのです。
本の通りなのですができません。
何故なのでしょうか?
559nobodyさん:2006/01/10(火) 09:37:51 ID:???
> unshift(@hoge, splice(@huga, 1, 1));
splice @huga, 0, 1
560nobodyさん:2006/01/10(火) 09:43:59 ID:???
>>559
それなら shift @huga でいいような...
561nobodyさん:2006/01/10(火) 10:57:13 ID:j2HoU23f
まだずっとやってるんですが、何故ならないんだろう。

>>559,>>560
レスありがとうございます。
「splice @huga, 0, 1」も「shift @huga」も、@hugaの1番目のみを削除しているんですよね?

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

っていうファイルを

2,3,4,5
7,8,9,10
12,13,14,15 と変える...?

ちょっと違うような。@hugaから抜いた1番目のものを
@hogeの先頭にくっつけるには
unshiftを使って、<配列の先頭に要素を追加する>と書いてありました。
更にそのまま引用すると

●配列の$i番目の要素を別の配列の先頭に追加する
unshift(@newarray, splice(@oldarray, $i, 1));
(CGI/perlポケットリファレンスより抜粋)

何が間違っているのでしょうか......
562nobodyさん:2006/01/10(火) 12:06:07 ID:???
>>561
perlの配列は添字が0から始まるので、最初の要素から
0番目,1番目,...とあらわすことがよくあります。ポケット
リファレンスはこの書き方を採用しているようですな。
563nobodyさん:2006/01/10(火) 12:09:39 ID:???
>>561
> 何が間違っているのでしょうか......

ここ↓
> ●配列の$i番目の要素を別の配列の先頭に追加する

splice の第二引数は配列の先頭からのオフセットなので 0 から始まるのよ。
即ち通常は splice し始める要素の添字と一致する。従って、

> unshift(@newarray, splice(@oldarray, $i, 1));

の動作はその本の記述に合わせると、
「配列の$i+1番目の要素を別の配列の先頭に追加する」
ということになる。

@oldarray から取り除くものが先頭要素に固定されているのなら >>559 の言うように、

unshift @newarray, shift @oldarray;

で等価。
564563:2006/01/10(火) 12:12:37 ID:???
訂正
s/>>559/>>560/
565563:2006/01/10(火) 12:44:26 ID:???
>>561
おせっかいついでに、
当方は

「あなたがどんな結果を期待しているのか」
「実行したコード」
「実際の結果」

のうちどれひとつとして知らないので、本来は「何が間違っているのでしょうか」と問われても「何かが間違ってるんでしょうねぇ」としか答えられないのですわ。
だから期待した返答がなくても、あるいは期待しなかった返答すらなくても許してね。ぼくがんばったの。
566nobodyさん:2006/01/10(火) 15:28:44 ID:???
strictじゃないperlのcgiも、$を$main::で置換したらuse strictに大変身。
マジお勧め!
567nobodyさん:2006/01/10(火) 15:57:35 ID:???
>>566
$namae = 'kansuu';
$bangou = 1;
${$namae . $bangou} = kansuu;
&$kansuu1;
sub kansuu { print 'hoge' }
568nobodyさん:2006/01/10(火) 16:06:53 ID:???
3行目をクオートしてあげないと怒られちゃうぞ。
569nobodyさん:2006/01/10(火) 16:24:34 ID:???
strictに初挑戦してみた
これでOK?
ちなみになぜ&kansuu1;でいいのかいまいちわかってなかったりするw
myとか使ってやってみてるけどデキネorz

#!/usr/local/bin/perl
use strict;

$main::namae = 'kansuu';
$main::bangou = '1';
$main::{$main::namae . $main::bangou} = 'kansuu';
&kansuu1;
sub kansuu { print 'hoge' }
570567:2006/01/10(火) 16:31:00 ID:???
>>568
それがstrictじゃ無い環境だと勝手に文字列扱いしてくれるんだよね、これが
-wで警告が出るけど、その辺の解釈が微妙だからstrict subsがあるわけだ
my $hoge = func;
sub func { print 'hoge' }
print $hoge;

>>569
ちょ、おまw
>>567はネタで考えられる限りの悪例だぞw

> ちなみになぜ&kansuu1;でいいのかいまいちわかってなかったりする
${$namae . $bangou}ここで$namaeと$bangouを連結した名前の変数、
つまり$kansuu1に代入してるから。

strictに真面目に書くとこう
my $name = 'kansuu';
my $num = 1;
my %hash;
$hash{$name}[$num] = \&func;
&{$hash{$name}[$num]};
sub func { print 'hoge' }
571nobodyさん:2006/01/10(火) 16:37:22 ID:???
>>570
俺もまさかそのままで通るとは思わなかったw
一応strictになってるっぽいw

あと、$kansuu1に連結して、&kansuu1で呼び出すのはわかるんだけど、
なぜ&kansuu1;でサブルーティン呼び出せるのかがいまいちわからんのだ
572nobodyさん:2006/01/10(火) 17:11:34 ID:???
>>571
あースマン$がないの読み落としてた
これは、名前空間を直接操作してmain::kansuu1にkansuuを登録しちゃってるから。
$, = "\n";
print keys %main::;
とかやってみるとわかると思う
573nobodyさん:2006/01/10(火) 17:34:33 ID:???
なるほど
ちょっとだけわかってきた気がする

#!/usr/local/bin/perl
use strict;

$main::test = 'yeah';
$main::{$main::test} = 'kansuu';
&yeah;
sub kansuu { print 'hoge' }

これでも呼び出せるって事か
つかややこしいなぁ
初心者の俺には理解の範疇を超えそうな感じだよ
色々試してがんばって消化してみる
574nobodyさん:2006/01/10(火) 17:34:45 ID:NnDCxprG
C で関数を関数へのポインタで呼ぶ。 ってことが Perl でも出来るんですね
575nobodyさん:2006/01/10(火) 18:05:03 ID:???
こういう使い方ってこなれた人はわかってて当然?

俺はこのやり取りを見ずに>>573を見ても、
何でだかさっぱりわからなかったと断言できるかも。

普通にsub yeahを探しちゃうだろうし。
576nobodyさん:2006/01/10(火) 18:07:05 ID:???
だから悪例だっつってるだろ。んなもん消化するな。
577nobodyさん:2006/01/10(火) 18:15:52 ID:???
main::をつければstrictというのもネタだから信じないように
確かにuse strict;は通るがそういう問題じゃない
578nobodyさん:2006/01/10(火) 18:15:53 ID:???
嫌がらせには使えるな
579nobodyさん:2006/01/10(火) 20:48:46 ID:???
初心者惑わすには持って来いだな。
580nobodyさん:2006/01/10(火) 20:50:34 ID:???
>>579
「初心者」は禁句
581nobodyさん:2006/01/10(火) 23:19:13 ID:???
文字コード変換で質問です。

Shift_JISコードのCSVファイルを読み込んで、jcode.pl を使ってJISコードに変換してから
ブラウザに吐き出すCGIプログラム(プログラムはJISコード)を作成中なのですが、

1. CSVを読み込む
2. htmlタグ文字のエスケープ(<>&"')
3. JISコードに変換
4. 出力

の場合には文字化けは起こらなかったのですが、2. と 3. の処理を逆
(変換してからエスケープ)にすると文字化けしてしまいました。
これは、JISコードの日本語文字中に、htmlタグ文字(<>&"'のどれか)が
含まれているのが原因という認識でいいのでしょうか?
その回避策として、Shift_JISの状態でエスケープをするのは問題ないでしょうか?
(Shift_JIS の場合は「\」が入る文字があるのは認識してますが他にも含まれる文字があればマズイですよね…)

ご教示いただけると幸いです。
582nobodyさん:2006/01/10(火) 23:27:58 ID:???
>>581
> これは、JISコードの日本語文字中に、htmlタグ文字(<>&"'のどれか)が
> 含まれているのが原因という認識でいいのでしょうか?
そのとおり。どれかどころか全部含まれる

> その回避策として、Shift_JISの状態でエスケープをするのは問題ないでしょうか?
その五つの文字に関してはShift_JISの範囲外だから問題ない。
良く知られている\のほかにも色々な文字が範囲に入っているので
EUC-JPに変換したほうが良いこともある。

ここを見ると良く解ると思う
ttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html
583nobodyさん:2006/01/10(火) 23:29:17 ID:???
>>581
エスケープ対象が2.に示したものだけなら、シフトJISの2バイト目には来ないので大丈夫だろう。
584581:2006/01/11(水) 02:32:30 ID:???
>>582,583

レスありがとうございます。
JISコードの場合は <>&"' が全部出てくる可能性があるんですね。
非常に勉強になります。。

ちなみに、タグ文字をエスケープ(< など)で現れる
セミコロンは自体は大丈夫でしょうか?
(日本語の1byte目とくっついて文字化けなど)

とりあえずはSJISのエスケープでやってみます。
ありがとうございました。
585nobodyさん:2006/01/11(水) 03:01:58 ID:???
>>584
範囲内にあるかは>>582のページと適当なASCIIコード表をつき合わせればわかる。
ttp://adlib.rsch.tuis.ac.jp/~akira/lect/softa/ascii.html とか
--------------------------------81=====9F---------------E0=====FC-: SJIS全角 上位
----------------40=============================================FC-: SJIS全角 下位
に対しセミコロンは3Bで範囲外
そもそも、範囲内だったしてもamp;のように1byte目となる位置は必ずアルファベットでしょうが
586nobodyさん:2006/01/11(水) 09:19:18 ID:???
>プログラムは JIS コード
これは絶対外せないルールなのか?
587nobodyさん:2006/01/11(水) 10:05:55 ID:CQ4aDWhi
http://www.hero.ne.jp/~db/
このCGIをダウソしたんですが、CGIを設定することができずに困ってます
とりあえずウェブスペースにうpしたら「500 Internal Server Error」と表示されました
どなたかお願いします
588nobodyさん:2006/01/11(水) 10:41:24 ID:???
日曜日とかがCGI休みのサーバとかじゃない?
589587:2006/01/11(水) 10:49:16 ID:???
http://www.hero.ne.jp/~db/herodb-othersite.shtml
このあたりの設定も満足にできていません

>>588
たぶん自分のコーディングミスだと思います
590587:2006/01/11(水) 10:56:49 ID:???
http://www.breeze.jp/s02_faq_01.php#q23
ここに設置しようと思ってます
591nobodyさん:2006/01/11(水) 11:22:37 ID:???
Web製作板でやれ
592nobodyさん:2006/01/11(水) 12:01:21 ID:???
コーディング以前の問題
593587:2006/01/11(水) 15:39:23 ID:CQ4aDWhi
そうですか・・
薄々聞く場所を間違えたのではないかと思っていましたが
お邪魔しました
他をあたります
レスありがとうございました
594nobodyさん:2006/01/11(水) 18:11:07 ID:???
こんな感じでURLから文書取ってくるのを書いたのですが、

use strict;
use warnings;
use utf8;
binmode(STDOUT,':encoding(shiftjis)');
use LWP::UserAgent;
my($ua,$req,$res);
$ua = LWP::UserAgent->new;
$ua->timeout(10);
$req = HTTP::Request->new( GET => $ARGV[0] );
$res = $ua->simple_request($req);

この状態で$res->header('Content-Type')を出力するとなぜか二重になって返ってきます。
例えばYahooにアクセスさせて出力すると
text/html;charset=euc-jptext/html; charset=euc-jp
なんて文字列が返ってきます。
これはおかしいと思うのですが、なにか間違えていますか?

HTTP::ResponseはActive Perl 5.8.7についてたやつで、バージョン1.52です。
595nobodyさん:2006/01/11(水) 18:12:22 ID:???
for構文(hogeの所は違う処理)がプログラム全体でちょくちょく出てくる場合って、
$iにはmyとかつけてあげた方が負荷的には少なかったりする?
再利用されるならグローバル変数でも問題なさそうな気がするけど、
こういう所って負荷を気にするならどうするのかなとちょっと質問。
もっと気をつけるところはあるんだろうけど、とりあえずやれるだけはやっておきたいので。
596nobodyさん:2006/01/11(水) 18:27:30 ID:???
負荷云々の前に use strict しろと小一時間
597nobodyさん:2006/01/11(水) 18:50:18 ID:???
つーか $ua-get() を使わないのは何で
598nobodyさん:2006/01/11(水) 18:55:27 ID:rynIEcBA
JavaScriptのscreen.availHeightの様に、モニタの表示サイズを参照したりする事はできますか?
599nobodyさん:2006/01/11(水) 18:59:22 ID:???
それぞれのOSのAPIでも使ってろ、と
600nobodyさん:2006/01/11(水) 19:07:41 ID:???
>>597
リダイレクトを自動的に処理させたくないのでsimple_requestを使っています。
また $ua->get をつかっても、やはりContent-Typeが二重になって返ってきます。

今気がつきましたが、Googleにアクセスすると完全に二重ではなく
text/htmltext/html; charset=Shift_JIS
という、すごい中途半端な感じになります…。
601nobodyさん:2006/01/11(水) 19:14:24 ID:???
$ua->max_redirect(0)
ってしたらリダイレクトされんと思うが
602nobodyさん:2006/01/11(水) 19:26:15 ID:???
>>600
それリスト ("text/html", "text/html; charset=Shift_JIS")
as_stringでprintしてみ
603nobodyさん:2006/01/11(水) 19:30:17 ID:???
html中のMETAも読むみたいだね。
解決策は>>602が言っているようにリストで返ってくるから、配列で受け取る。
604nobodyさん:2006/01/11(水) 19:48:01 ID:???
>>601
そうすればgetメソッドでもできましたか。
しかし、個人的に見た目にすぐわかるのでsimple_requestを使っておきます。

>602-603
なるほど。リストでしたか。
解決できました。本当にどうもありがとう。

META要素も読んでいるのですか?
HTTP関係のモジュールは継承がすごくてどのモジュールをperldocすればいいのか…。
605nobodyさん:2006/01/11(水) 19:54:11 ID:???
というか
use utf8;
意味解って使ってるか?
606nobodyさん:2006/01/11(水) 20:20:40 ID:???
>>605
はい、スクリプト中のリテラルをすべてUTF-8として扱い、
それらをUTF-8フラグ付き文字列に変換するということですよね。

今回のスクリプトではマルチバイトの文字がないので意味はないですが、
よく、スクリプトを作るに出力するエンコードをbinmodeですぐ変換できるようにつけていました。
その習慣で今回もつけてしまいました。すいません。
607nobodyさん:2006/01/11(水) 20:59:00 ID:???
おまいがやりたいのは
use encoding 'utf8';
じゃないのか? まぁどっちでもいいのかもしれんけど。

use utf8;
$useutf8したからこんな変数名も使える = '中身';
print $useutf8したからこんな変数名も使える;
exit;
608nobodyさん:2006/01/11(水) 21:19:14 ID:???
>>604
> META要素も読んでいるのですか?
LWP::Protocol::httpがLWP::Protocolのcollect()を呼び出していて、
そこでHTML::HeadParserをrequireしてる。
609nobodyさん:2006/01/11(水) 22:10:05 ID:???
>>607
encondingプラグマはスコープがグローバルなはずなので、
他のエンコードで書かれたモジュールで問題が起きませんか?
マルチバイト使ったモジュールなんかそう無いので気にする必要ないかもしれませんが、
自分で何か作った時に、「した覚えがないのにUTF-8化されている」のはなんかハマる気がします…。

>>608
LWP::UserAgentからちょっと呼んでみました…。
…私には荷が重いようで…。
よくわからないので、headerメソッドの第1要素を使っておきます…。
どうもありがとうございます。
610nobodyさん:2006/01/12(木) 01:27:01 ID:???
プログラム板でスレ違いといわれたのでこちらで聞き直します。

CGI を書くときには 有名なとほほさんの http://www.tohoho-web.com/cgi/wwwperl.txt のように
環境変数を直接読むのが普通です。
ただ、近頃は、CGI.pm を使うの方法も増えているようです。
でも、聞いた話によると、CGI,pmを読み込む分、環境変数を直接扱うより遅くなるそうですし、
使えない環境もあるそうです。
なんか、CGI.pmのマニュアル見ても難しそうだし、結局、CGI.pmを使うメリットというのは何なのでしょう?

611nobodyさん:2006/01/12(木) 01:31:28 ID:???
CGI.pmって200KBぐらいあるよね
バイナリかよ、って笑っちゃうぐらい
今は物好きしか使ってないんじゃない?
612610:2006/01/12(木) 01:40:26 ID:???
>611
環境変数直接扱い → CGI.pm
と変わってきたけど、結局、今はまた環境変数直接扱いの方が見直されてきたということで良いんでしょうか?
613nobodyさん:2006/01/12(木) 01:57:56 ID:???
>>610
POSTのマルチパートも扱いが楽。
mod_perlもサポート。
ってところかな。

普通に使ってる。
614nobodyさん:2006/01/12(木) 07:19:00 ID:???
有用なCPANモジュールの多くがCGI.pmを使ってるからな
パフォーマンス的に問題が無ければ
何も考えないでCGI.pm使っておけば問題ないよ
615nobodyさん:2006/01/12(木) 07:28:05 ID:???
そうかとほほが普通か…。
616nobodyさん:2006/01/12(木) 07:42:43 ID:???
>614
逆を言えば、パフォーマンス的に問題があるかどうかわからない場合、CGI.pm使わない方が良い?
617nobodyさん:2006/01/12(木) 07:59:39 ID:???
>>616
1日に何万ヒットもあったりレン鯖でCPUやメモリの制限に引っかかるようだったら
自前で用意したりカスタマイズしたほうが良いんじゃない
単純にデコードだけしたいんならCGI::Liteでもいいんじゃね?
結局はケースバイケース
618nobodyさん:2006/01/12(木) 08:07:57 ID:???
パフォーマンス、パフォーマンスと初心者ほど過剰に気にするが、
パフォーマンスに困るぐらいのアクセスがあってから言えってんだ。
619nobodyさん:2006/01/12(木) 09:08:02 ID:???
初心者でもアクセス数の多い企業サイトを担当することはある。

いや、俺のことだが。
620nobodyさん:2006/01/12(木) 12:42:21 ID:???
後から修正すると大変だから最初に気をつけた方がいいしな。
621nobodyさん:2006/01/12(木) 12:48:54 ID:???
その場合はすでにあるフレームから外れたことはしない方がいい。
初心者のうちは。
622nobodyさん:2006/01/12(木) 13:25:04 ID:???
パフォーマンスもいいけど、セキュリティにも気を配ってくれよ。

なんて言っても、痛い目を見ないと分かってくれないわけだが。
623nobodyさん:2006/01/12(木) 14:15:30 ID:???
>>622
初心者だから踏み台にされてることにも気が付かない。これ。
624nobodyさん:2006/01/12(木) 14:28:34 ID:???
>>619
可哀想に。下手すれば一瞬で信用を失うな。
625nobodyさん:2006/01/12(木) 14:41:25 ID:???
CGI.pmとか重すぎるし
フォームをパースするだけにしか使わんから
自作した
626nobodyさん:2006/01/12(木) 14:47:32 ID:fUom/aNQ
%VALUE = (1 => "#602000", 2 => "#FF0000", 3 => "#008040", 4 => "#0000BB");
%COMMENT = (1 => "未設定", 2 => "重要", 3 => "ビジネス", 4 => "個人用");
%CLASS = ("#602000" => "none", "#FF0000" => "important", "#008040" => "business", "#0000BB" => "personal");

こんなハッシュがある状態で、
$color = "#008040";
という変数を使って、
%COMMENTの"ビジネス"を取得って可能でしょうか。
627nobodyさん:2006/01/12(木) 14:51:45 ID:???
可能だけどデータ構造を再考したほうがいいよ。
628nobodyさん:2006/01/12(木) 15:07:23 ID:fUom/aNQ
できました!
ハッシュのキーと値をペアで取り出せるeach関数なんていうのがあったんですね!

%VALUE = (1 => "#602000", 2 => "#FF0000", 3 => "#008040", 4 => "#0000BB");
%COMMENT = (1 => "未設定", 2 => "重要", 3 => "ビジネス", 4 => "個人用");
%CLASS = ("#602000" => "none", "#FF0000" => "important", "#008040" => "business", "#0000BB" => "personal");
$color = "#008040";
while (($key, $value) = each (%VALUE)) {
  if ($color eq $value) {
    while (($new_key, $value) = each (%COMMENT)) {
      if ($key eq $new_key) {
        $comment = $value;
      }
    }
  }
}
print $comment;

ありがとうございました。
629nobodyさん:2006/01/12(木) 18:06:27 ID:???
データ構造悪すぎ。そんなもん普通ループいらんぞ。
例えばこう内側のループが消えるように。
while (($key, $value) = each (%VALUE)) {
  if ($color eq $value) {
    $comment = $COMMENT{ $value };
    last;
  }
}
630nobodyさん:2006/01/12(木) 18:07:26 ID:???
やっちゃった。
$COMMENT{ $value }; → $COMMENT{ $key };
631nobodyさん:2006/01/12(木) 18:36:39 ID:???
my $comment;
{
 my %temp = reverse %VALUE;
 $comment = $COMMENT{$temp{"#008040"]}
}

が楽だと思う。
632nobodyさん:2006/01/12(木) 19:21:41 ID:Xjv4jYTd
■ド素人です。
更新めんどくてperlでhtmlファイル管理、生成のプログラム書いてみたんだけど、なにせド素人なもんで、そんで質問以下の構造のモノって鯖に負担になりますか?
-------------
上:ヘッダ一部、トップlogo部分
左;左メニュー、左メニューに日記の新着記事、左メニュー広告欄
中:中央センター上部広告、本文(※)、フッタ
右:右リンクメニュー、右メニューの広告欄
 部品的に見てこれらでレイアウト(構成)されてるサイトなんですが「本文(※)」以外は、全ページの共通表示部分になるのです。
 要するに、サイト全体の共通部分を上記の様に部品別に.logでバラバラに保存してそれをCGIでHTML生成する時に、上記の部品を一回一回読み込んで、配列に代入して、printで出力。
本文は別のログに保存してあって、それだけブラウザで編集可能、それも同時に読み込んで行って、htmlとして出力される作り。
 本文が保存されているlogファイルは、数十ページの本文内容を、件名<>本文<>etcの様に、<>で区切って、改行別に保存(ページ数が増えるとドンドン重たくなる)
 で、問題はここから★
 サイト全体でページ数が200〜300ぐらいになるのです。(更新すりゃもっと増加)
こう言った作りだと、共通表示部分、例えば、「左メニュー.log」のコンテンツへのリンクを変更すれば、サイトのページ300ファイルを全部更新(html生成)し直さなくちゃいけない訳です。
 ちなみに300ファイル一気に生成するわけではなくって、同じスクリプトを複数設置しているのでサイトのテーマ別、例えば「サイト案内」のコンテンツだけで10ファイルあって、
それらを複数のスクリプトで計300ファイル程度を生成する作りです。
 なにせド素人なもんで、変な無鉄砲なモノした組めないです。情けない
 これって、とゆうか、配列の乱用?と計、数メガにのぼるhtml生成って負担になりますか?
なんか自分で書いてて、何がなにやらよく分からん様になってきた。アホ文失礼。orz
633nobodyさん:2006/01/12(木) 19:24:13 ID:vLiWBj2u
ド素人じゃないのにド素人を装って教えを請うのはみっともない
それともっと簡潔に
でなきゃサイトを晒すか・・・
634nobodyさん:2006/01/12(木) 19:32:13 ID:???
>>632
> 本文が保存されているlogファイルは、数十ページの本文内容を、件名<>本文<>etcの様に、<>で区切って、改行別に保存(ページ数が増えるとドンドン重たくなる)

本文が再帰してるように読める
635nobodyさん:2006/01/12(木) 19:33:31 ID:???
> 数メガにのぼるhtml生成
ここが意味不明。
1つのHTMLファイルが数メガになるのか?
636nobodyさん:2006/01/12(木) 19:50:39 ID:vLiWBj2u
まずテーマごとにそのテーマの ID を決める
ログファイルは月ごとぐらいで更新する (といっても1年で1000ページとか行かないだろうから1年あたり1つのログでいいかも)
(ただそのファイルがぶっ飛んだらその年のページが全部飛ぶことになるので月ごとが安全っちゃ安全か)
ページ (行ね) には必ず ID を割り振る

これを条件として、CGI には テーマ ID、ログファイル名、ページ ID を渡す
ページ ID が取得できなければそのログ一覧を。
ログファイル名が取得できなければログ一覧 (各月の一覧か隔年の一覧なのかは自分で決めてね)
テーマ ID が取得できなければテーマ一覧を表示する。

こうすればページあたりのヒット数とか、テーマ別ヒット数とかが用意に取得できるようになる
637nobodyさん:2006/01/12(木) 19:51:47 ID:vLiWBj2u
投稿したあとフトおもった
ディレクトリで分けてもいいな
./テーマ ID /ログファイル
んでテーマ ID とするディレクトリにテンプレート用 HTML を置いておくとか
638nobodyさん:2006/01/12(木) 20:47:10 ID:???
> CGI.pm

というかクエリー取得のためだけに CGI.pm 使ってる人って十中八九
「なんちゃってモジュール使っちゃってます厨」
でしょ。

おまえら資源のムダだから大人しく自分で車輪の再発明してろと(ry
639nobodyさん:2006/01/12(木) 22:17:59 ID:???
>>632
メニュー部分をSSIで呼び出すようにすれ。
表示は重くなるけど、悪くないトレードオフだと思う。
640nobodyさん:2006/01/12(木) 23:13:08 ID:???
>>638
資源の無駄なんてことを言うレベルなら Perl やめるべきだと思うが
641nobodyさん:2006/01/12(木) 23:14:10 ID:???
>>632
普通にblog使ったら?
今あるデータをコンバートする方向で。
システム作るより、コンバータ書いた方が楽だと思う。

どういうデータにしたら良いかは、実際にここログとか無料のblogに入ってみて、
データを書き出してみれば分かるはず。
その形式で出力するように、今あるデータに対するフィルタを書く。
642nobodyさん:2006/01/12(木) 23:14:14 ID:pW3y8Hzc
いわゆるURLのオートリンクをやりたいのですが
http://hoge.com/ho/ge というのと hoge.com/hoge/ge が両方

<a href="http://hoge.com/ho/ge">hoge.com/ho/ge</a> というリンクになる
変換をしたいと思います。 これを正規表現で一発でやるというのは出来るのでしょうか?
643nobodyさん:2006/01/12(木) 23:17:32 ID:vLiWBj2u
接頭語 (http とか ttp とか) がないと辛いんじゃないかな
644nobodyさん:2006/01/12(木) 23:19:36 ID:???
>>642
正規表現で処理する以前に、
hoge.com/hoge/ge
がURLであるかどうか、判断できないような…。

www*.hoge.com/hoge/ge
とかならURLと見なして処理することも出来るだろうけど。
645nobodyさん:2006/01/12(木) 23:24:33 ID:???
>>632
サーバー側でやるような処理じゃないよ。ローカル側で処理すべき。

そもそも300ファイルすべてに左メニューとか右メニューとか必要なの?
上部に1本、パンくずリンクでもあれば済むんじゃないの?
なんの情報も生まない、しかも広告入りのメニューが左右を延々占領するのもかなわん。ユーザビリティの履き違えかエロサイトの仕様だ。
646nobodyさん:2006/01/13(金) 00:00:39 ID:???
>>640

精々頑張ってCGIモジュール読み込むか車輪の再発明してるといいよ。
647nobodyさん:2006/01/13(金) 00:08:31 ID:???
ドメイン.(com|net|org|jp)/(パス文字列)+
くらいで大雑把にとか。
648nobodyさん:2006/01/13(金) 00:28:25 ID:???
>>646
テンプレみたいな捨て台詞ですね:-P
649nobodyさん:2006/01/13(金) 00:29:47 ID:42x/OYc6
>648
テンプレみたいなあげ足取りですね
650nobodyさん:2006/01/13(金) 00:30:59 ID:???
「車輪の再発明」なるものを避けるには天麩羅もまた一興
651nobodyさん:2006/01/13(金) 00:35:03 ID:???
実際クエリ取得→CGIモジュールな人間は
おまえらどこでそんな中途半端なモジュールの使い方覚えてきたのかと。
652nobodyさん:2006/01/13(金) 00:37:15 ID:???
某配布の大御所…
653nobodyさん:2006/01/13(金) 00:41:22 ID:???
>>647 その線でやってみました。 これで今のところ希望する動作をしてます。

$domain = '[\w\-]+\.[\w\-\.]+';
$path = '\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+';
s/(http:\/\/|\b)($domain($path)?)/<a href=\"http:\/\/$2\">$2<\/a>/g;
654nobodyさん:2006/01/13(金) 00:47:54 ID:???
微笑ましい記述に萌え
655nobodyさん:2006/01/13(金) 00:51:26 ID:???
653じゃないけど、
ちゃんと取得できてるのか確認しながらコーティングするとこうなるんよ
656nobodyさん:2006/01/13(金) 01:00:29 ID:???
これってwarningsで警告出ないんだっけ?
657nobodyさん:2006/01/13(金) 01:07:46 ID:???
>>653
メールアドレスも引っかかるじゃん。
658nobodyさん:2006/01/13(金) 01:14:20 ID:???
メールアドレスもスキーム付いてればUR(I|L)だけどね。
659nobodyさん:2006/01/13(金) 01:25:35 ID:???
\.[a-z]{2,6}\/ が見つかった前後で、URI として認められない文字列 (改行、空白、全角) が出てきた範囲を抜き出せばいいかも
正規表現で出来そうだけど、俺には無理w
660nobodyさん:2006/01/13(金) 01:59:59 ID:???
>>658
普通にリンクされるならまだいいけど、@以前が切れる。
[email protected]ならfoo@<a href="http://example.com">example.com</a>みたいに。
661653:2006/01/13(金) 02:23:13 ID:???
11 a.m. のa.m.がリンクになってしまった… あと\bは\sの間違い。これでメールには
対処おk。

$domain = '[\w\-]+(\.\w[\w-]*\w)+';
$path = '\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+';
s/(http:\/\/|\s)($domain($path)?)/ <a href=\"http:\/\/$2\">$2<\/a>/g;

ドメイン名のそれぞれの部分は一文字より多いという姑息な手段で対処。
662nobodyさん:2006/01/13(金) 02:32:04 ID:???
やってみた。ドメイン名の左側に@が付くものは除外。
TLDがないと色々誤爆しそうなので幾つか勝手に固定。
http://user:[email protected]/ みたいものまでは考えないことにする。

my $regex_http = q{(?:h?t?t?p?:?//|(?<![@\w\-./]))([\w\-.]+(?:com|net|org|jp)/?[\w\-.!~*'();\/?:\&=+\$,%#]*)};
s|$regex_http|<a href="http://$1">http://$1</a>|g;
663653:2006/01/13(金) 03:26:13 ID:???
>>662
ありがとうございます。 一生懸命読解を試みました。 (?:)とか(?<!)等は探して理解しました。
なるほど、玄人な道具ですね。 それから正規表現を|でくくると中でいちいち/をエスケープ
しなくていいというのも便利な技で参考になりました。 それからURLに使われる特殊
文字ってもっとあったのですね。 

1つ質問。q{}ってなんでしょうか? ある種のクオートな気がしますが記述を
見つけられませんでした。
664nobodyさん:2006/01/13(金) 03:33:08 ID:???
>>663
クォートとクォートのような演算子
ttp://namazu.org/~tsuchiya/perl/info/perl-ja_44.html#SEC44
665nobodyさん:2006/01/13(金) 05:21:58 ID:???
open(LOG,"$datfile");
flock(LOG, LOCK_EX);
@alldata = <LOG>;
close(LOG);
foreach $data (@alldata){

中略

}
print "<p>完了しました。</p>";

という構文で、ファイルの各行の文字列を読み取って、処理を行う、という動作をさせ、
終了時に「完了しました。」の文字列を表示、という風にしているのですが、
ファイルの行数が少なかった頃は何の問題もなく処理を完了していたのですが、
800行を超えた辺りから、「完了しました。」の文字を表示しないこともあります(ブラウザは完了したような振る舞いをします)。
また、処理の結果を見ても、ファイルの途中までしか処理されていないようです。
恐らくforeach文の回数が多すぎるからだと思うのですが、何か対処法は御座いませんでしょうか?

お教え下さいますようお願い致します。
666nobodyさん:2006/01/13(金) 09:05:02 ID:???
>>665
コマンドラインでもダメってこと?
まさかレン鯖で実験してたりしないだろうな。
レン鯖だとしたら時間でプロセス切られてるだけだと思うが。
667nobodyさん:2006/01/13(金) 13:00:33 ID:???
668nobodyさん:2006/01/13(金) 19:51:25 ID:???
とりあえず暇なのでオートリンク自分もアップしてみる。

http://2ch-eva.under.jp/uploader/file/src/up0018.txt

ftpにも対応しようとしたが挫折。ていうか正規表現でやることじゃないな。

というかこんな未熟な俺にも言わせてほしいことといえば
キャラクタクラスの中で \ 使うなよと。

# なんで\dじゃなくて[0-9]なんて書いてるんだorz
669nobodyさん:2006/01/13(金) 20:34:19 ID:???
>>668
\d は UTF-8 フラグ付きの '1' (全角) にもマッチする。
[0-9] だとマッチしない。
670nobodyさん:2006/01/13(金) 21:05:28 ID:???
そうだったのか。まだまだ読み込みが足りんわ。サンクス。

今度は中途半端に\d使ったことが…… orz
671nobodyさん:2006/01/14(土) 00:23:37 ID:???
>>665
どうしても配列に格納しなけりゃならんのでなけりゃ、以下を試してみないか。

while (<LOG>) {
  # 何ぞ処理
}
672nobodyさん:2006/01/14(土) 00:49:22 ID:???
変数のスコープについて質問。 設定を別ファイルで定義してrequire して使おうと思います。

# 設定ファイル settei.pl
$CFG_HOGE=1;
$CFG_MOGE=2;
1;

#!/usr/local/bin/perl
require 'setttei.pl';

print "hoge=$CFG_HOGE, moge=$CFG_MOGE\n";

さて、これでuse strictを付け加えるとCFG_*変数に対してエラーが出ます。 そこで両方の

ファイルでmyとしたら設定はプログラムの方では見えないんですね。 こういうことを
use strict
で行うのはどうすればいいのでしょうか?
673nobodyさん:2006/01/14(土) 00:52:41 ID:???
行き当たりばったりで strict してもあんまりいいことないよ。


なんてこといってるとどうしょうもなくなるか。

パッケージとか名前空間とかで検索してみな。
674672:2006/01/14(土) 01:50:37 ID:???
>>673
ありがとうございます。 模索してみました。

トライ1:
すべての$CFG_*を$main::CFG_*にする。 これでコンパイル出来、前と同じ振る舞いになりました。 
しかしmain::だらけでうっとうしい。

トライ2:
settei.pl の頭にpackage main;と加える。 main::はsettei.plの中は無し。
こうしてメインで$main::CFG_*と参照すればやはり機能しました。

しかしメインで直に$CFG_と参照するように出来る方法が分かりませんでした。 メインで
my $CFG_* と宣言するとsettei.plでされた設定はメインでは見えませんでした。
う〜ん、よく分からん。
675672:2006/01/14(土) 02:11:55 ID:???
>>673
こんなのはどうでしょうか。 今までCFG_と付けてたのをやめてsetttei.plは
package CFG;
$HOGE=1;
$HOGE=2;
1;

そしてメインではこれらを$CFG::HOGE, $CFG::MOGEで参照。 これが綺麗かな?

676nobodyさん:2006/01/14(土) 02:44:14 ID:???
>>672
#--- MyConf.pm ---
package MyConf;
use strict;
use base 'Exporter';
our @EXPORT = qw($Foo $Bar);
our($Foo, $Bar) = (1,2);
1;
__END__

#!/usr/local/bin/perl -w
use strict;
use MyConf;
print $Foo, $Bar;
__END__
677nobodyさん:2006/01/14(土) 03:24:19 ID:???
私が最近好んで使ってる方法ですが・・・
◆ config.pl
my(%config) = (
 'fuga' => 1,
 'hoge' => 2,
 'gagaga' => "SEGA"
);
sub returnconfig{
 return %config;
}

◆ main.cgi
require 'config.pl';

my(%config) = &returnconfig();
print $config{'fuga'};


わざわざ呼ばなきゃいけない&同じ内容がメモリ内に2つ存在するので効率悪いっちゃ悪いですが・・・
678nobodyさん:2006/01/14(土) 03:32:05 ID:???
>>677
んなことするくらいだったらタブ区切りの設定ファイルを
読み込んでハッシュに入れた方が管理も楽でしょ
679nobodyさん:2006/01/14(土) 03:43:59 ID:???
>>677
#--- config.file ---
use strict;
{
  foo => 1,
  bar => 2,
  baz => [ 'a'..'z' ],
};
__END__

#!/usr/local/bin/perl -w
use strict;
my $conf = do '/path/to/config.file' or die;
print $conf->{'baz'}[7];
__END__

>>678
設定ファイルを Perl で書ける。
680672:2006/01/14(土) 04:43:19 ID:???
>>679
do ファイル; なんて出来ちゃうんですか。 これもなかなか美しいですね。
681nobodyさん:2006/01/14(土) 04:44:08 ID:???
>>677
#--- 設定
package Setup;
use strict;
sub get{
bless( {
 foo => 1,
 hoge => 2,
 array => [1,2,3]
} , $_[0] );

}
1;
__END__

#!/usr/local/bin/perl
use strict;
use Setup;
my $setup => Setup->get;
print $setup->{'foo'};
print $setup->{'array'}->[0];
__END__
682nobodyさん:2006/01/14(土) 05:58:58 ID:???
遅くなりました。返信有難う御座います。

>>666
レン鯖です。
やはりタイムアウト的な処理でしたか。
それを避ける方法は御座いますでしょうか?

>>671
open(LOG,"$datfile");
while ( $data = <LOG> ) {

処理

}
close(LOG);

であってますでしょうか?
683nobodyさん:2006/01/14(土) 06:19:45 ID:???
>682
処理がどんなことしてるかは知りませんが、たかだか 800 行程度でタイムアウト起こすような
貧弱サーバーそのものの利用を考えたほうが良いのではないのでしょうか?


>671
個人的には foreach の方が perl らしくて好き

foreach my $logline (<LOG>){
  〜処理〜
}
684nobodyさん:2006/01/14(土) 06:32:02 ID:???
foreachじゃリストに展開するから配列にいれるのと一緒になっちゃうだろ。
685nobodyさん:2006/01/14(土) 08:03:10 ID:???
おっなるほど。 while を使うのはそゆことでしたか。
自分は 682 さんではありませんが、1つ勉強になりました。
thx
686nobodyさん:2006/01/14(土) 09:24:51 ID:???
>>683

馬鹿が「perlっぽい」とか言わなくていいから。
もうこのスレに書かないほうがいいよ。

687nobodyさん:2006/01/14(土) 09:37:38 ID:???
ここwebprog板だぜ
688nobodyさん:2006/01/14(土) 09:39:12 ID:???
perl で書かれた CGI のソースに、$vout 変数内に a タグで mailto: のリンクが書いてあり、クライアントが
リンクを踏むと、メーラーが立ち上がるようになっています。

が、mailto: に subject と body を含めて、かつ body には改行を含めたいのですが、どうしてもエラーになってしまいます。
以下を含める場合、どのように書けばよいのでしょうか ?

<持込に関して> ← subject
↓本文
@お名前[改行]
@ご住所[改行]
@お電話番号[改行]
<問い合わせ内容詳細>

ソースは ShiftJISになっています。よろしくお願いします。
689nobodyさん:2006/01/14(土) 09:39:30 ID:???
#!/usr/bin/perl
use LWP::Simple;
$url = 'http://girls.twistys.net/preview/';
for ($i=1; $i<=3; $i++) {
 $num = sprintf("%03d", $i);
 $_ = get($url.$num."/");
 s/\w*\d{1,2}\.jpg/push @jpgs, $&/eg;
 foreach $jpg (@jpgs) {
  getstore($url.$num."/".$jpg, $num.$jpg);
 }
}
690nobodyさん:2006/01/14(土) 10:13:25 ID:???
>>688
このスレの質問じゃねぇし
http://www.ring.gr.jp/pub/doc/RFC/rfc2368.txt

mailto:[email protected]
?subject=%8E%9D%8D%9E%82%C9%8A%D6%82%B5%82%C4
&body=%40%82%A8%96%BC%91O%5B%89%FC%8Ds%5D%0D
%0A%40%82%B2%8FZ%8F%8A%5B%89%FC%8Ds%5D%0D%0A
%40%82%A8%93d%98b%94%D4%8D%86%5B%89%FC%8Ds%5D
%0D%0A%3C%96%E2%82%A2%8D%87%82%ED%82%B9%93%E0
%97e%8F%DA%8D%D7%3E

上を一行に合わせれ
691nobodyさん:2006/01/14(土) 10:43:53 ID:???
>683
> 処理がどんなことしてるかは知りませんが、たかだか 800 行程度でタイムアウト起こすような
その行について、どんな処理をしてるかわからないのに800行で判断する、っていうのはどうかと。
行数で判断するんだったら7万行で、に置き換えてください。そして、タイムアウトするのを避ける方法を教えてください。

なんかコンビニバイト風情が、肉体労働者に「一日働いただけで疲れるのはどうかと」って言ってるのと同じかな
692nobodyさん:2006/01/14(土) 10:56:45 ID:???
> foreach my $logline (<LOG>){
>   〜処理〜
> }

こんな処理を800行「程度」を越える量書くとは…… 俺のレン鯖にいないことを願おう。
693nobodyさん:2006/01/14(土) 10:57:54 ID:???
タイムアウトを考えてのことなら7万行じゃ少ないんじゃない?
せめて70万行とかさ
694nobodyさん:2006/01/14(土) 11:32:10 ID:???
>>690

ありがとうございます。
実は、同じようにURLエンコードして、おっしゃられたように入れてみたのですが、エラーになってしまうんです。
元に戻すとサーバエラーはでなくなるので、記述の仕方がどこか違うようなんですが
perl の独特な記述の仕方があるのかと思って書き込ませて頂きました。
695nobodyさん:2006/01/14(土) 11:33:21 ID:???
無限ループ作れば1行ですむ
696nobodyさん:2006/01/14(土) 11:50:37 ID:???
エラーになると言っておいてエラー内容を書かないのはなんで?

多分、ダブルクオートで囲って @ や % が変数に展開されてるに一票。
697nobodyさん:2006/01/14(土) 12:07:44 ID:???
データ自体が16から32kbytes程度なら、
別にforeachでも問題なかろう。
それで問題が起きるなら、それこそ鯖が貧弱。
698nobodyさん:2006/01/14(土) 12:14:40 ID:???
愚直にファイル読み込んでタイムアウトになるならファイルの構造を
見直すしかないでしょ

データの量(行数だけでは分からないだろ)も処理の内容も
分からねーのに、何か教えてほしいなんて無理
699nobodyさん:2006/01/14(土) 12:36:49 ID:???
>>697

馬鹿のプロセス切るのは「鯖が貧弱」
だからじゃなくて管理がしっかりしてるからでしょ。
「問題」じゃまったくないし。

まぁ実際 32kb で切ってたら別の問題だけどね。

お前は書かないほうがいいよ。
700nobodyさん:2006/01/14(土) 12:53:21 ID:???
  おチンチンびろーん
   ∩___∩
   | ノ      ヽ/⌒)
  /⌒) (゚)   (゚) | .|
 / /   ( _●_)  ミ/
.(  ヽ  |∪|  /
 \    ヽノ /
  /      /
 |   _つ  /
 |  /UJ\ \
 | /     )  )
 ∪     (  \
        \_)
701nobodyさん:2006/01/14(土) 12:56:32 ID:???
>>696

使っているサーバがエラー番号などが出ない仕様なんです。
「サーバエラーが発生しました…」という文章しか出ないので。

確かにダブルクォートで囲って有ります。$vout に代入されているようなんですが…。

その場合はどうすればいいでしょうか ?
702nobodyさん:2006/01/14(土) 13:23:01 ID:???
サーバで実験しない
よいこの約束
703nobodyさん:2006/01/14(土) 15:29:20 ID:???
>>699
ログが十分に小さければ、foreachとwhileの違いだけで、変わる状況なんて無いね。
仮に、それで問題が起きるなら、プロセス辺りのメモリ割り当てが
かなり小さいぐらいしか考えられない(鯖が貧弱)。
ってことなんだが(苦笑)。

4年書き続けてきたけど、もうだめぽか、ここも。
704nobodyさん:2006/01/14(土) 15:36:47 ID:???
10万行ループなどMTの再構築に比べればたいしたことない
705nobodyさん:2006/01/14(土) 15:53:30 ID:???
>>701
たのむからローカルでやってくれ
706nobodyさん:2006/01/14(土) 16:33:57 ID:???
>>701
他人の管理下にあるサーバで実験しない。自分が動かしているサーバで
実験すれば、そのログを見てデバッグできる。
>>1に書いてある通り、エラーの内容も貼れないんじゃ質問以前の問題だ。

>>703
4年もいるんだったらスルーすることぐらい覚えろよ。
707nobodyさん:2006/01/14(土) 18:00:04 ID:???
>foreach( <> )
とか書いてある時点でダメに決まってるじゃん。

それとも4年前からこんな感じだったの?
708703:2006/01/14(土) 18:36:01 ID:???
>>707
私の書き方は>>336を参照してください。
短いファイルなら、ロックする時間をできるだけ短くするように書いてます。
709nobodyさん:2006/01/14(土) 19:59:22 ID:???
> while( <$FH> )
普通こうする。読み込みなら文句なしに最強。

> foreach( @FILE )
いわずと知れたKEMT仕様。そして何故か入門者ご用達。
でも頻繁に書き込み(書き込みロック)が必要な場合好んで使う人も。

> foreach( <$FH> )
謎仕様。ファイル開きっぱなしで配列展開。KEMTもびっくり。
710nobodyさん:2006/01/14(土) 20:31:18 ID:???
>>709
while は最強っていうか、単に昔から Perl の参考書に多い処理ってだけじゃ?
711nobodyさん:2006/01/14(土) 21:02:12 ID:???
<$FH> は他のメソッドなり何なりにかわるかもしれんが、
それでも逐次読み出しか一気にメモリに読み出してしまうかに大別できるでしょ
多分。
712nobodyさん:2006/01/14(土) 21:10:27 ID:???
自分のスクリプトでforeachからwhileに置き換えられるところは置き換えたんですが、その際に1つ疑問が出ました。

リファラのログを取ってて最大件数500件で、501件目が来たら古いリファラは削除して新しいリファラを追加するって処理の時に
現在が何件のログが貯まってるかを調べる時にはwhileだと一旦最後までループさしてカウンタをカウントアップさせて総数を得て、
その次にまたwhileで処理って感じになると思うんですが、

foreachでメモリに負担 なのと whileでDISK I/Oに負担とじゃ他のユーザーも同時に使ってるサーバー上ではどの処理がやさしいんでしょか?

今までforeachしか使ってなくてそれを否定された感があってちょっと自信難儀に陥ってまして助言とか意見があれば参考にしたいと思います。
713nobodyさん:2006/01/14(土) 21:41:50 ID:???
>>712
おれならメモリに突っ込んでやるけど
テスト環境を用意できるならベンチとってみれば?

714nobodyさん:2006/01/14(土) 21:56:12 ID:???
大抵のシステム(OS)はファイルにアクセスするときに先読みやキャッシングをしてくれるので
Perlで二度アクセスするときのIOは気にする必要は小さなファイルであればいりません。

逆に、プログラムの中でキャッシング的な目的でメモリに読み込もうとすると
OS等の低レベルキャッシングとアプリケーションレベルのキャッシングが
物理メモリに配置されることになって、特別な事情がない限り非効率的です。


ちなみにそういうファイルを後から読み込みたいときは専用のモジュールがあります。
Text::Backwords (名前うろ覚え)
今回のケースではメモリ、IOともにもっとも効率がよくなるかと。
715nobodyさん:2006/01/14(土) 21:59:37 ID:???
途中で書き足したら意味が解らん。ヤバス。
まぁ要は専用のモジュール使えって事で
716nobodyさん:2006/01/14(土) 22:04:45 ID:???
>>714
File::ReadBackwards ?
717nobodyさん:2006/01/14(土) 22:10:51 ID:???
メモリ使用量が数百KBレベルの差しかないんだったら、処理が高速な方を選択するよ。
さっさと処理を終らせてメモリを開放させてあげるほうが共用サーバでは重要だし。
718nobodyさん:2006/01/14(土) 22:19:54 ID:???
普通はメモリに読み込まないほうがメモリ使わなくて高速だからね。
どうもそこらへんわかってないやつが多すぎる。
719nobodyさん:2006/01/14(土) 22:24:28 ID:???
メモリ数百k無駄遣いしてまで共有サーバーで自分のプロセス優先するのね。
「共有サーバーではそっちが重要」とか思い込み激し杉
720nobodyさん:2006/01/14(土) 22:38:45 ID:???
>>719
細かい読み込み(しーく)も、鯖に負担かけるんじゃないの?
携帯も初期はそれで問題になったわけだし
良し悪しは良くわからんけど。
721nobodyさん:2006/01/14(土) 22:44:26 ID:???
>718
お前は全部分かってないな
722nobodyさん:2006/01/14(土) 22:54:26 ID:???
初心者スレで無理に玄人ぶるのはみっともないね
723nobodyさん:2006/01/14(土) 23:01:51 ID:???
>>720

システムのキャッシュが破棄されるほどの間隔をおいてアクセスする場合、
そんな長い時間アプリケーションレベルでメモリを確保しとくのは他のプロセスの邪魔。
そしてそのメモリの消費がさらにシステムのキャッシングを圧迫するという悪循環。

普通はアプリケーションレベルでは間欠・逐次的な読み込みでも。
OSがHDなどと協力してアクセスのあったファイルを物理メモリに先読みしてるので
間欠シークは発生しない。

「特定の状況下」で「ハードからソフトまでを知り尽くした」上でのキャッシングは
当然否定しないし、むしろ俺の理解の及ぶ範囲ではないが。

# 窓達だとデフォルトでディスクキャッシュ用メモリの確保量が少ないから効果あるかもね。
724nobodyさん:2006/01/14(土) 23:03:58 ID:???
>>723
前提がおかしくない?つーか自分に都合良い前提にしてない?
725nobodyさん:2006/01/14(土) 23:16:26 ID:???
そんなつもりはないんだけれど。
どこが違和感あるのか言ってもらえんと説明のしょうが……
726nobodyさん:2006/01/14(土) 23:27:26 ID:???
一般にプロセスは太ると死ぬまで痩せない。
理解が充分でない自覚がある場合はメモリを節約するアプローチで概ね間違わない気がするよ。
727nobodyさん:2006/01/14(土) 23:30:48 ID:???
>>723 の言ってるのは
レン鯖で他のユーザの使用率とかも分からないのに
変に考えて小手先の技使ったって無駄ってことでは。

いまどきI/Oのアクセスをユーザが気にしなきゃならんOSなんて
レン鯖で使ってないよ。
しかも言語がPerlなんだよね。

頻繁に叩かれるスクリプトで、ガバッとメモリ喰うと
そっちの方でディスクにアクセスがかかるかも知れないってのを
心配してるんじゃないのかな。
728nobodyさん:2006/01/14(土) 23:36:57 ID:???
ともかく変な思い込みでperlのメモリに乗せまくるなと
while( <$fh> )も結局は物理メモリのキャッシュから読み込んでる訳で、
遅くないから心配するなと。
729nobodyさん:2006/01/14(土) 23:39:43 ID:???
遅い遅くないの前に、逐次処理しかできないのって不便じゃない?
それで済むならいいけどさ
730nobodyさん:2006/01/14(土) 23:40:09 ID:???
鯖用途のHDだとHD内部のキャッシュメモリサイズも民生品とは桁違いだったり
731nobodyさん:2006/01/14(土) 23:49:08 ID:???
>729
便利・不便じゃなくてシーケンシャルアクセスをどうやるかでしょ。

foreach( @ ) も foreach( <> ) もやりたい事は(多くの場合)シーケンシャルアクセス。
732nobodyさん:2006/01/14(土) 23:50:31 ID:???
スクリプトで一番怖いのが、ファイルロックで
プロセスがプロセスキューに溜まる事だと考えてる。
ファイルリードより、スワップの方がコスト高そうだし。
だから、なるべく早くロックを開放することを考えてるよ。

でも、実際そこまで厳しい状態はほとんど知らないし、
そこまで考える必要があるかどうかは分からんけど。
733nobodyさん:2006/01/15(日) 00:01:11 ID:???
Perl【の】コーディング【を】初心者【に】質問【する】スレ
734nobodyさん:2006/01/15(日) 00:04:02 ID:???
先に読み込んでおいてからロック解除して後で書き込みロックするってことは
書き込み頻度低いってことでしょ?
(そうじゃなきゃ編集衝突するよね?)

メモリに展開する必要ないじゃん。
735nobodyさん:2006/01/15(日) 00:04:24 ID:???
ロックは怖いね。
NASとか使ってると、鯖の構成とか製品によっては
フロントの鯖から、ロックファイルが見えるまでにタイムラグがあったりする。
736nobodyさん:2006/01/15(日) 00:04:59 ID:???
みなさん色々ないけんありがとうございます。
読んでいった感じ、「メモリには優しく」 というのを感じました。

ただまた1つ疑問がw
DB 使ってるとして、巨大なテーブルが戻ってきちゃう場合はどうするんでしょ?
さすがにこれはしょがないんでしょうか・・・
737nobodyさん:2006/01/15(日) 00:07:52 ID:???
SQLでLIMITとか使う
738nobodyさん:2006/01/15(日) 00:08:55 ID:???
>>736
1. DB に処理できることは DB にやらせる
2. 表示なら巨大なものは最初から表示できないから無駄なものは取得しない

いずれでもない場合ってこと?
739nobodyさん:2006/01/15(日) 00:15:22 ID:???
>736

普段どうやってDBアクセスしてるの?
まさか一度二次元配列にぶちこむとかやってないよね?
740nobodyさん:2006/01/15(日) 00:21:05 ID:???
>739
いやDBは使ったこと無いです(興味あるっちゃありますが・・・)

>737,738
たとえば得られたテーブルが (巨大とはいえないけどとりあえず) 5項目程度で1000行だとして、
SQL文で500行目〜700行目だけ欲しいっていうことって出きるんですか?
出来るならそれで解決なんですが ^^;
741nobodyさん:2006/01/15(日) 00:23:02 ID:???
>>740
> SQL文で500行目〜700行目だけ欲しいっていうことって出きるんですか?
できる
742nobodyさん:2006/01/15(日) 00:29:05 ID:???
SQLの応答が巨大だからってそれが直にメモリに展開されるわけじゃないから
743nobodyさん:2006/01/15(日) 00:32:01 ID:???
Perl側に持ってきちゃったら展開されると思うけど
744nobodyさん:2006/01/15(日) 00:39:40 ID:???
>741
なるほろ。 解決しました
thx
745nobodyさん:2006/01/15(日) 00:40:24 ID:xHRm9xcd
>>740
sql limit offsetあたりをキーワードに検索をかけると幸せになれるぞ。
つか、スレ違いっぽいな。
746nobodyさん:2006/01/15(日) 01:00:08 ID:???
ああスレ違いだageんなバカ
747nobodyさん:2006/01/15(日) 01:05:57 ID:a4Y6+QOP
>>746
そんなつまらん事なら書き込むな、このボケ。つか志ねよ。
748nobodyさん:2006/01/15(日) 01:06:45 ID:???
>>747
はいはいわろすわろす
749nobodyさん:2006/01/15(日) 13:13:53 ID:???
Perlについて学び始めの者ですが、SSIをHTML内に埋め込んだ様な使い方ができると知ってふと思ったのですが…

-sample.html-
<html>
<head>
<!--#exec cmd="sample.pl"-->
こんにちは
</body>
</html>

-sample.pl-
print"<title>sample</title>\n";
print"</head>\n";
print"<body>\n";

…これって良いのでしょうか?
Perlのパスも記述せず、文法的にも…
一応ちゃんと動作してるんですが、何か物凄く間違ってる気がしてなりません…。
750nobodyさん:2006/01/15(日) 13:27:44 ID:???
>>610の話題はhttp://pc8.2ch.net/test/read.cgi/tech/1134327348/523-648のことだよね
利点が分からないなら無理して使う必要はないし、お好みでどうぞ。
ちなみにCGI.pmは標準でインストールされていて、もし入っていなくてもCPANから落として@INC内に入れれば使えます。


# モジュールが重いとか言っていたら、DBIもJcodeもutf8も使っていられませんよ。CGI.pmが重いなら、MovableTypeを使うなんて論外ですね。
751nobodyさん:2006/01/15(日) 13:41:01 ID:???
うわぶり返し(; ^ω^)
752nobodyさん:2006/01/15(日) 14:35:28 ID:???
まだやりたらないみたいですね^^^
753nobodyさん:2006/01/15(日) 14:59:53 ID:???
自演乙
754nobodyさん:2006/01/15(日) 16:34:25 ID:???
>750

またおまえ「ら」かよ。いい加減なんちゃってモジュール使いたいがために
さるみたいにCGIモジュール直接読み込むのやめろ。な?

しかもそれで知ったかで質問にレスするし。
最悪。
755nobodyさん:2006/01/15(日) 16:41:10 ID:???
まぁ通常の CGI では重たいモジュールの利用を避けるべき、という
のは分からなくもない(やりたきゃ自分でサーバ用意して mod_perl や
fastcgi でやれってこと)が、それならそれで適切な表現てもんが
あると思うがな。
756nobodyさん:2006/01/15(日) 16:43:02 ID:???
「使いたくないやつは使わない」
それでいいじゃん
〜終了〜
757nobodyさん:2006/01/15(日) 16:44:34 ID:???
>>754が必死な理由が全然ワカンネ
758nobodyさん:2006/01/15(日) 16:47:29 ID:???
わざわざ車輪の再発明する理由はないけどね。
まぁCGIモジュールしか知らないなら使わないのは正解かもね。
759nobodyさん:2006/01/15(日) 16:50:52 ID:???
>757

共有サーバーでみんなが右も左も解らず無駄にCGIモジュールをロードしたらどうなると思う?
760nobodyさん:2006/01/15(日) 16:54:23 ID:???
まだやってたのかよ・・
761nobodyさん:2006/01/15(日) 16:58:32 ID:??? BE:397407694-
レン鯖でCGI動かすような環境でPerl勉強してたら敬遠するようになるだろうなー
762nobodyさん:2006/01/15(日) 17:01:02 ID:??? BE:353252148-
これだから「WebProg板は・・・」って言われるんだよな
763nobodyさん:2006/01/15(日) 17:25:16 ID:???
先程から拝見していましたが、
結局クエリ読み取るときにはどうすればいいんでしょうか。
教えてください。
764nobodyさん:2006/01/15(日) 17:34:06 ID:???
>>763
ラクダ本読め
以上
765nobodyさん:2006/01/15(日) 17:37:39 ID:???
ラクダ本て
えらい遠回りな
766nobodyさん:2006/01/15(日) 18:21:55 ID:???
>>763

use CGI::最小限;
767nobodyさん:2006/01/15(日) 18:30:31 ID:???
>>763
迷うならCGI.pm使う。
パフォーマンスを追及したかったら思ったらCGI::minimalをインスコして使う。

根拠はperlfaq9
http://www.kt.rim.or.jp/%7Ekbk/perl-5.8/perlfaq9.html#how_do_i_decode_a_cgi_form
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_decode_a_CGI_form_
768nobodyさん:2006/01/15(日) 19:24:47 ID:???
微笑ましいレスだな。
769nobodyさん:2006/01/15(日) 19:54:25 ID:???
GETしか使わないからURL::Queryに突っ込んでる。
770nobodyさん:2006/01/15(日) 20:39:21 ID:???
自分の意見を押し通さないと満足しない厨房たち(笑)
771nobodyさん:2006/01/15(日) 20:41:22 ID:???
いろんな方法が表に出てくるのはいいことだ
772nobodyさん:2006/01/15(日) 20:45:26 ID:???
sub decode {
  binmode(STDIN);
  if($ENV{'REQUEST_METHOD'} eq "POST"){
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  }else{
    $buffer = $ENV{'QUERY_STRING'};
  }

  @pairs = split(/&/, $buffer);
  foreach $pair (@pairs) {
    ($name,$value) = split(/=/,$pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $in{$name} = $value;
  }
}
スクリプト書くたびにコレを書いてる
マルチプル、マルチパートなんて使わないのでこれで十分事足りてる
773nobodyさん:2006/01/15(日) 20:57:56 ID:???
>>772

590 549 sage 2006/01/13(金) 12:44:01
>>568
説明すると長くなるから
ttp://perldoc.jp/docs/perl/5.6.1/perlfaq9.podの
How do I decode a CGI form?の項を1000回読め。
とほほのコードがどうしてまずいのかがよ〜く解るだろう。

ついでにCGI.pmはpure perlだから読んでみるとよかろう。
もし君が解読しきれなくても本当に正しくフォームデコード
するというのはどんなに大変なことなのかぐらいは解るだろう。

CGI/util.pmのunescapeメソッドを読むだけでも君は
ここで「とほほのコードはWebProg板では普通のコード」
と言い切ってしまったことをとても恥ずかしく思うようになるはずだ。

cgi.pmのマニュアルがよく解らないというのはオブジェクト指向や
参照渡しがよく解ってないからじゃないのかな。
cgi.pmにはcgi-lib.plもどきの関数インターフェースもあるので
Webを漁って探してみてくれ。日本語訳もあるよ。

まあ頑張れ。
774nobodyさん:2006/01/15(日) 21:20:06 ID:???
>>773
まずレス先をきちんと明示できるように「掲示板の書き方」勉強してみるべき
日本語も不自由でかわいそう・・・
775nobodyさん:2006/01/15(日) 21:22:56 ID:???
readのエラーチェックとかアホみたいだな
エラーチェックしなかったら、どうなるんだってのw
776nobodyさん:2006/01/15(日) 21:30:59 ID:???
俺仕様で不備が指摘されても開き直る人
777nobodyさん:2006/01/15(日) 21:34:52 ID:???
反論されて耳が真っ赤でイライラして、必死に言い返す言葉を模索中の>773
778nobodyさん:2006/01/15(日) 21:35:18 ID:???
いいかげんパラメータ区切り;に改善しろよ。
779nobodyさん:2006/01/15(日) 21:37:12 ID:???
そして平然を装って書き込む>778=773
780nobodyさん:2006/01/15(日) 21:38:02 ID:???
そんなくだらない言い争いしてないで
ttp://pc8.2ch.net/test/read.cgi/php/1127916965/
このスレの依頼でもやってクリ

俺の依頼もスルーされてるけど、とりあえず他の人の依頼でもいいからさ
781nobodyさん:2006/01/15(日) 21:42:33 ID:???
>>779
お前は自分の不備を指摘する人間はみんな同一人物だと思ってるのか?
……お疲れさまです。
782nobodyさん:2006/01/15(日) 21:51:27 ID:???
>778=773=781
落ち着けよwwwwwwwww
783nobodyさん:2006/01/15(日) 21:55:05 ID:???
具体的にreadのエラーチェックしなかったらどうなるの?
悔しかったら反論してみろよw
784nobodyさん:2006/01/15(日) 21:58:42 ID:???
wwwww
785773:2006/01/15(日) 21:59:42 ID:???
俺様にはそんな技量無いので説明できません
786773:2006/01/15(日) 22:07:51 ID:???
>783
「エラーチェックしなかったらどうなるのか無知な僕に教えてください」だろ。
いくら初心者質問スレだからって人に教えを請う態度ぐらい身につけて下さい。
787nobodyさん:2006/01/15(日) 22:10:49 ID:???
無知?お前じゃんw
788nobodyさん:2006/01/15(日) 22:12:37 ID:???
今ここで煽りあってるのは、偉そうにいえるほど効果的なのを組める人ばかりなの?
789nobodyさん:2006/01/15(日) 22:14:36 ID:???
うん、そうだよ
790nobodyさん:2006/01/15(日) 22:21:26 ID:???
脳内プロフェッショナルな子供が罵りあうスレと聞いて飛んできました
791nobodyさん:2006/01/15(日) 22:22:30 ID:???
お手本プリーズ
792nobodyさん:2006/01/15(日) 22:39:08 ID:???
居ないみたいだし>>772がこのスレの限界ということだな。丸く収まったじゃないか。
793nobodyさん:2006/01/15(日) 22:41:17 ID:???
めっちゃグローバル変数
794nobodyさん:2006/01/15(日) 22:48:33 ID:???
ちょっと組むぐらいならグローバル変数でも十分なんじゃ?
795nobodyさん:2006/01/15(日) 22:59:10 ID:???
基本は>>772でいいんじゃないの?
突っ込みどころが数箇所あるけど
796nobodyさん:2006/01/15(日) 23:01:47 ID:???
初心者の俺から見ると普通に>>772でいいように見える。
ダメだと言ってる人、折角だから完璧なモノに改造してくれないか?
参考にするから。
797nobodyさん:2006/01/15(日) 23:09:01 ID:???
そだね
偉そうに言ってる人が>>772を改造して結果を出せば「ごもっともな意見です」といえるんだけど
798nobodyさん:2006/01/15(日) 23:22:09 ID:???
書き直す技量がないから静かになったw
799nobodyさん:2006/01/16(月) 00:02:12 ID:???
攻撃されてた人カワイソスwww
800nobodyさん:2006/01/16(月) 00:52:24 ID:???
>>772の作ったスクリプトに、でかいサイズの動画でも送りつけると楽しいことになりそうだ。
掲示板なら、投稿するリンクを2chに貼るのもいいか。
801nobodyさん:2006/01/16(月) 01:00:09 ID:???
それと、脆弱性とは私は呼んでないけど、
同じ名前を持つパラメータを送ると、
後から送られたデータに上書きされるよね。
802nobodyさん:2006/01/16(月) 01:03:07 ID:???
>801
>マルチプル、マルチパートなんて使わない
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
803nobodyさん:2006/01/16(月) 01:04:48 ID:???
誰か例のモジュールとのDiffとって貼っといて
804nobodyさん:2006/01/16(月) 01:10:39 ID:???
指摘してるほうも馬鹿ばっか。
子供が意気がるのも道理だな。
805nobodyさん:2006/01/16(月) 01:12:46 ID:???
>800
そのまえにサーバーでエラーにならない?
全部のサーバーがどんだけのサイズを許可してるかわからんけど受信サイズの制限ぐらいはあると思う
806nobodyさん:2006/01/16(月) 01:17:03 ID:???
面白そうなのに。
もっと熱い奴ギボン。
807nobodyさん:2006/01/16(月) 01:25:42 ID:???
>>805
まあ、そうなんだけど、実際にサーバが許してるサイズが分からないしね。
アップローダを見ていると、32M程度なら許していそうな所もあるし、
それでDOS攻撃仕掛けるとかね。
808nobodyさん:2006/01/16(月) 01:29:57 ID:???
揚げ足鳥じゃなくて、こうすればOKって例出したほうが早いのでは。
809nobodyさん:2006/01/16(月) 02:33:58 ID:???
それが出せるヤシが残念ながらこのスレには誰一人として存在しない
810nobodyさん:2006/01/16(月) 02:40:28 ID:???
荒れるのが明らかだから提示しないだけかと
811nobodyさん:2006/01/16(月) 02:40:45 ID:???
>798から改良ソース出てないし結局は底辺が底辺に教えを乞うスレ
812nobodyさん:2006/01/16(月) 02:41:24 ID:???
と底辺が解説するスレ
813nobodyさん:2006/01/16(月) 02:41:38 ID:???
例を出して即荒れるとしか考えが出ないお前のネット人生って(ノ∀`)
814773:2006/01/16(月) 02:44:44 ID:???
なんだこの荒れ具合は
>>774
http://pc8.2ch.net/test/read.cgi/tech/1134327348/590
全部コピペで日本語一文字付け足していませんが何か
815nobodyさん:2006/01/16(月) 02:50:52 ID:???
他のスレでも書いてたのか
なにもそんな不自由な日本語を色んなところで自ら晒さなくても・・・
816773:2006/01/16(月) 02:57:22 ID:???
どう解釈すれば俺がそのレスを書いたことになるのかと
817nobodyさん:2006/01/16(月) 02:59:17 ID:???
それすらも考えられないぐらい日本語不自由なのかorz
818nobodyさん:2006/01/16(月) 03:02:36 ID:???
パンチ5分の2再来の予感
819nobodyさん:2006/01/16(月) 03:08:12 ID:???
埋め
820nobodyさん:2006/01/16(月) 03:09:32 ID:???
埋め
821nobodyさん:2006/01/16(月) 03:10:17 ID:???
822nobodyさん:2006/01/16(月) 03:11:20 ID:???
生目
823nobodyさん:2006/01/16(月) 03:12:08 ID:???
右芽
824nobodyさん:2006/01/16(月) 03:13:03 ID:???
宇目
825nobodyさん:2006/01/16(月) 03:14:17 ID:???
鵜雌
826nobodyさん:2006/01/16(月) 03:15:59 ID:???










        (´・ω・`)











827nobodyさん:2006/01/16(月) 03:17:08 ID:???
浮召
828nobodyさん:2006/01/16(月) 03:18:52 ID:???
829nobodyさん:2006/01/16(月) 03:19:34 ID:???
>816
荒らすのはやめれ!
830nobodyさん:2006/01/16(月) 07:55:23 ID:???
>>807
受信サイズの制限ってよりも、割り当て可能なメモリに制限って感じだな。サーバー側でかける制限は。
んで、そんな制限をかけてないサーバーに1GBほどをPOSTすると、この行で大変なことになる。
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

効率優先で俺様ロジックするのもいいけど、
小手先でやるくらいならモジュール使って安全を買うのもありかと。

ときどき変なスレの伸び方するなぁ。
831nobodyさん:2006/01/16(月) 08:21:36 ID:???
問題があるでだけで終わらすと、またそれに対して質問がくるよw
先に$ENV{'CONTENT_LENGTH'}で受信サイズを調べろってことですな
832nobodyさん:2006/01/16(月) 12:41:16 ID:???
1GBも来たらhttpdが先にあぼーんする悪寒
833nobodyさん:2006/01/16(月) 12:57:23 ID:eJEL1pbq
php+pearで
server.php
<?
require_once 'XML/RPC/Server.php';
$map = array('test' => array('function' => 'test') );
$svr = new XML_RPC_Server($map);
function test($param) {
return new XML_RPC_Response(new XML_RPC_Value('OK'), "string");
}
?>

client.php
<?
require_once("XML/RPC.php");
$value = new XML_RPC_Value(
array("test" => new XML_RPC_Value("test", 'string')),'struct');
$msg = new XML_RPC_Message('test', array($value) );
$client = new XML_RPC_Client("/", "example.com", 80);
$response = $client->send($msg);
echo $contents = XML_RPC_decode( $response->value()) ;

では、問題なく動作するのですが、クライアントをperlで
#!/usr/bin/perl -w
use XMLRPC::Lite;
my $rpc = XMLRPC::Lite->new;
my $url = 'http://example.com/';
my $contents;
$rpc->proxy($url);
my $res = $rpc->call( "test",{ test => "test" });
print $contents = $res->result;
とすると、Unknown methodになります。
どこが間違っているのでしょうか?
834nobodyさん:2006/01/16(月) 13:00:39 ID:???
言ってる通りだと思うけど
Perl のコードを落ち着いて読む
835nobodyさん:2006/01/16(月) 13:39:55 ID:???
文字数制限もデコードも一PHPで全部解決!!!!!!!!1111
836nobodyさん:2006/01/16(月) 15:15:58 ID:???
なんつーか mod_uploader でも使ってろ。
837833:2006/01/16(月) 16:12:07 ID:eJEL1pbq
rubyで、
 require "xmlrpc/client"
 server = XMLRPC::Client.new( "example.com", "/")
 begin
  p server.call("test", 10)
 rescue XMLRPC::FaultException => err
  p err.faultString
 end
でも、"Unknown method"ですね。phpがおかしいのかな。
838nobodyさん:2006/01/16(月) 16:54:29 ID:???
マルチ死ね
839nobodyさん :2006/01/16(月) 16:58:09 ID:???
sage
840nobodyさん:2006/01/16(月) 16:58:39 ID:???
sage
841& ◆O45QsmDUy. :2006/01/16(月) 17:04:26 ID:???
sage
842& ◆Z2KySTSpOo :2006/01/16(月) 17:05:04 ID:???
sage
843nobody& ◆k0eA9hHNm2 :2006/01/16(月) 17:07:18 ID:???
sage
844& ◆O45QsmDUy. :2006/01/16(月) 17:09:23 ID:???
sage
845nobodyさん:2006/01/16(月) 17:54:10 ID:???
>>833
問題なさそうだけど。

それと、サーバーのResponseの部分はこうじゃない?
return new XML_RPC_Response(new XML_RPC_Value('OK', 'string'));
846nobodyさん:2006/01/17(火) 00:08:41 ID:???
文字変換について質問なのですが、
全角カタカナ・英数字・記号を、半角にしたいと思っているのですが、
どうしても 「(」と「!」が同じように処理されてしまって困っています。

s/!/!/gi;
s/(/(/gi;

とやると、全角の ( まで、半角の ! となってしまいます。
解決策はございますでしょうか?
よろしくお願いします。
847nobodyさん:2006/01/17(火) 00:21:01 ID:???
CGI.pmを使用して form を作成すると
<input type="hidden" name=".cgifields" value="test" />
といった hiddenタイプの.cgifieldが作成されます。

perldoc CGI を読むと、-nosticky プラグマで抑制可能と言うことは書いてあるのですが、
何のために使用されているものなのかわかりません。

この .cgifield は何のためにあるのでしょう?
848nobodyさん:2006/01/17(火) 01:00:44 ID:???
>772 をモジュール使って書くとこんなかんじ?
use strict;
use CGI;
use CGI::Util;
$CGI::POST_MAX=1024;
my $q=CGI->new;
my %in=CGI->Vars;
CGI::Util::unescape($_) for (values %in);

プログラム板のhttp://pc8.2ch.net/test/read.cgi/tech/1134327348/580 のマネしただけだけど。
正直、初心者なんで、ツッコミ頼む。
849848:2006/01/17(火) 01:17:44 ID:???
スマソ。>848は試しに動かしたらエラー出たので修正版。

use strict;
use CGI qw/:cgi/;
$CGI::POST_MAX=1024;
my $q=CGI->new;
my %in=$q->Vars;
CGI::Util::unescape for (values %in);
850nobodyさん:2006/01/17(火) 01:37:37 ID:???
>846
もし、perl5.8.0 以上なら、
use encoding 'shift-jis';
でOK
851nobodyさん:2006/01/17(火) 01:43:26 ID:???
>848
どうやって斜め読みしたら「モジュールを使って書く」って読めるんだ?
結局は日本語を読めない奴が増えただけかよ
852nobodyさん:2006/01/17(火) 01:56:42 ID:???
>848
たかがデコードごときにモジュールなんてつかってんじゃねーよ。
モジュールなんていらねーってコトの証明のために書いてんだよ。バーカ
853nobodyさん:2006/01/17(火) 01:58:28 ID:???
モジュール使わずに、わざわざ同じようなルーチンを手書きする必要って何だろう?
頭大丈夫?
854nobodyさん:2006/01/17(火) 02:01:26 ID:???
>>846
/i オプションを付けない。

>>847
perldoc CGI に書いてある。
http://search.cpan.org/~lds/CGI.pm-3.15/CGI.pm#nosticky
古いヴァージョンのドキュメントには明記されていないかも知れないが。

>>848-849
CGI::Util::unescape() は渡された文字列を percent-decode して返す
関数なので CGI::Util::unescape for (values %in); では戻り値を捨てて
いるだけ (%in の値は変化しない) し、CGI パッケージに輸出されている
から use CGI::Util; しなくても CGI->unescape() と呼べるし、そもそも
param() や Vars() ではちゃんと percent-decode 済の値を返してくる
から後から unescape() する必要は無い。

use strict;
use CGI ();
$CGI::POST_MAX = 1024; # 1KB
my %in = CGI->new->Vars;
855nobodyさん:2006/01/17(火) 02:02:59 ID:???
個人的には>>772みたいにスコープ無視なサブルーチンはごめん被りたいところだね。
856nobodyさん:2006/01/17(火) 02:04:37 ID:???
>>854
> ヴァージョン

なんて書くやつはばかです。

> パッケージ

どうせなら、パッケイジって書けばいいのに。
857nobodyさん:2006/01/17(火) 02:07:12 ID:???
>851
>結局は日本語を読めない奴が増えただけかよ
激しく同意。
851 には >797,>808 が読めないんだからな
858nobodyさん:2006/01/17(火) 02:11:07 ID:???
> 851 には >797,>808 が読めないんだからな

ということにしたいのですね。
859nobodyさん:2006/01/17(火) 02:14:53 ID:???
>858
それ3つとも俺w
俺じゃ出来ないから出来る人の改良ソースを待ってるわけでですよ。
860nobodyさん:2006/01/17(火) 02:19:58 ID:???
851=797=808 ?
だとすると、851 はモジュール使わない改良ソースを待っているのか?
861nobodyさん:2006/01/17(火) 02:26:34 ID:???
だから書けないから待ってるとw
862nobodyさん:2006/01/17(火) 02:29:47 ID:???
モジュールを使う派 vs モジュールを使わない派 の議論だと思ってたが違うのか?
863nobodyさん:2006/01/17(火) 02:39:01 ID:???
議論するくらいならそこはモジュール使うことにしておいて
空いた時間で他の生産的な事をしろ、ってのがPerlだと思う。
864nobodyさん:2006/01/17(火) 02:43:40 ID:???
>863
プログラミングはすべてそうだと思うけど…
865nobodyさん:2006/01/17(火) 02:48:02 ID:???
モジュール使えない環境なので、
どなたか最適なデコード方法教えてください>w<
866nobodyさん:2006/01/17(火) 02:52:10 ID:???
>863,>864
いや、この板には
・モジュールは重くて邪魔だ。
・これまでモジュールを使ってこなかったが、困らなかった。
・実は、オブジェクトがなんなのかわからないんだけど、分からないことがばれると恥ずかしい
等、様々な理由で、モジュール使いたがらない人たちが多いのですよ。
867nobodyさん:2006/01/17(火) 02:57:37 ID:???
>・実は、オブジェクトがなんなのかわからないんだけど、分からないことがばれると恥ずかしい
ソレダ!
868nobodyさん:2006/01/17(火) 03:05:48 ID:???
普通にそれ
というかイマイチ有用性がわからんのもある
869nobodyさん:2006/01/17(火) 03:06:00 ID:???
無限ループって怖くね?
870nobodyさん:2006/01/17(火) 03:08:19 ID:???
だって同じことが繰り返されるんだぜ?
871nobodyさん:2006/01/17(火) 03:30:52 ID:???
単にソースクレクレ君が張り付いてるだけだ。
伝家の宝刀は「このスレは回答者も初心者なんですね」。
この文句には注意な。
872nobodyさん:2006/01/17(火) 03:56:07 ID:???
> ・モジュールは重くて邪魔だ。
> 等、様々な理由で、モジュール使いたがらない人たちが多いのですよ。

mod_perl とか fastcgi とか lighttpd とか使えないような、
貧乏仕様の ISP 貸し出し環境の人が多いということですか。

それとも、cgi を呼ぶと必ずモジュールのロードからするものが Perl だ
とか思ってるんかな。
873nobodyさん:2006/01/17(火) 03:56:35 ID:???
>>868
自分が必要としていない物の有用性を幾ら説かれても理解には至らんよ。
コードに対する要求レベルは人それぞれで、KENT で充分だと感じる人も
いれば、CPAN にあるモジュールはどれも汚くて書き直したくなる、という
人もいる。この二者が納得するコードなんて書きようがないし、より高い
レベルを要求する事が常に正しいとは限らない。

だから妥協点として、公式マニュアル (perldoc) に書かれている事を指針
にしときましょう、というのが現実的な解。perldoc が難解だと感じるなら
Perl コミュニティ的に「平均」より下。perldoc すら甘いと考えているなら
厳しすぎ。
874nobodyさん:2006/01/17(火) 03:59:27 ID:???
> より高いレベルを要求する事が常に正しいとは限らない。

そもそもレベルの高低の客観的な評価基準きぼん。

> だから妥協点として、公式マニュアル (perldoc) に書かれている事を指針
> にしときましょう、というのが現実的な解。

それは、どこらへんの「現実」?

> perldoc が難解だと感じるならPerl コミュニティ的に「平均」より下。

それは、どこらへんの「Perl コミュニティ」?
「平均」の算出方法も明確にしておいてね。
875nobodyさん:2006/01/17(火) 04:06:01 ID:???
埋め
876nobodyさん:2006/01/17(火) 04:07:20 ID:???
齲女
877nobodyさん:2006/01/17(火) 04:08:17 ID:???
>>873
おまえ面白いな。
878nobodyさん:2006/01/17(火) 04:09:44 ID:???
879nobodyさん:2006/01/17(火) 04:10:26 ID:???
宇目
880nobodyさん:2006/01/17(火) 04:21:05 ID:???
881nobodyさん:2006/01/17(火) 04:25:26 ID:???
無限ループってこわくね?
882nobodyさん:2006/01/17(火) 04:27:54 ID:???
だって同じことが繰り返されるんだぜ?
883nobodyさん:2006/01/17(火) 04:29:40 ID:???
単にソースクレクレ君が張り付いてるだけだ。
伝家の宝刀は「このスレは回答者も初心者なんですね」。
この文句には注意な。
884nobodyさん:2006/01/17(火) 04:57:07 ID:tDsfmN2q
Perlで掲示板を作成したのですが、表示されるHTMLにPHPを使用したいのでprint等で記述しても、エラーになってしまいます。

Perl内でPHPを使用するにはどうすれば良いでしょうか?
885nobodyさん:2006/01/17(火) 04:57:28 ID:???
>861,>865
話の流れが理解できているなら、ソースを待っていても、>854 以上のものは出ないことは明白。
待ってても無駄だよ。
886nobodyさん:2006/01/17(火) 05:00:18 ID:???
>884
「表示されるHTMLにPHPを使用したいので」
のところが意味不明。

いったい何をprint等で記述したか書いてごらん。
887nobodyさん:2006/01/17(火) 05:20:40 ID:???
いや結果的にCGI.pmに、またはCGI.pmを改良したものに行き着くことぐらいは分かる
「>772をまずはこうやって・・・次にこうやって・・・」であれば>772のどこが悪いってのわかりますよね?
ちなみに>772は私がstrictで書く前の代物だったりします (書き直したものはstrictでとりあえず動いてるもののエラーチェックは細かくやってない)

ツッコミどころ云々とか言うだけ言って改良案すらも出ないのかなと
(出たのはread()に関するとこだけ)

ここが上級者スレならスルーはわかるけど・・・


>886
>884は print "echo $char\n"; とか出力して、PHP の echo の動作しない
というのが言いたいと思う

>884
無理かと
perlでPHPのファイル出力してそれをクリックさせるか、CGIとして出力したPHPファイルをperlから呼び出すかぐらいじゃないでしょか?
というか、そもそもそんなことやる必要があるんですか? 無駄だと思うのですが・・・
888nobodyさん:2006/01/17(火) 05:53:42 ID:???
<?php virtual("hoge?cgi"); ?>
でPHPに埋め込むのではいかんのか
889nobodyさん:2006/01/17(火) 05:59:37 ID:???
>>859
ちょwwwさりげなく俺の発言まで自分の発言にするなよw
>>808はお前が書いたんじゃないだろ。
他のは知らないが。
890nobodyさん:2006/01/17(火) 06:16:16 ID:???
>884
先に、hoge.php があるのなら、
print qx[php "hoge.php"]

phpスクリプトを生成するなら
my $php_code='echo "$char\n";';
print qx[php -r "$php_code"];
で何とかなるかもwww
891nobodyさん:2006/01/17(火) 06:28:38 ID:???
>>887
人に文句付ける前に、お前が改良案出してやれよ。

>>884
やりたいことが>>887の通りだとしたら、
出来ないことはないけど、お勧めしない。
PHPはCLI版またはCGI版があることが条件で、
CLI版の場合はあらかじめヘッダを出力してあげること。

# print "Content-type: text/html\n\n";
open(PHP, "| /usr/local/bin/php") or die;
select(PHP);
print while(<DATA>);
close(PHP);
exit;

__END__
<?
echo "hello, world!";
?>
892nobodyさん:2006/01/17(火) 08:23:47 ID:???
先に文句付けられた方なのですがorz

>>889
あっ、よく見てなかったw
808は私ではない
893891=767:2006/01/17(火) 08:57:58 ID:???
>>892
知らんがな。

ま、私を煽っても何も出ないよ。
894nobodyさん:2006/01/17(火) 09:06:52 ID:???
>>772をちょっと修正

sub decode {
  my ( $buffer, %in );
  if($ENV{'REQUEST_METHOD'} eq 'POST'){
    if( $ENV{'CONTENT_LENGTH'} > 1024 ) { die 'CONTENT_LENGTH error' }
    binmode(STDIN);
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  }elsif($ENV{'REQUEST_METHOD'} eq 'GET'){
    $buffer = $ENV{'QUERY_STRING'};
  }else{ die 'REQUEST_METHOD error' }
  my @pairs = split(/&/, $buffer);
  foreach my $pair (@pairs) {
    my ($name,$value) = split(/=/,$pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $in{$name} = $value;
  }
  return %in;
}
895nobodyさん:2006/01/17(火) 09:16:43 ID:nYyzHE1C
現在、携帯用のサイトを作っています。

メールフォームを利用したページを作っているんですが、
記入漏れがあった時、エラーを表示するようにPERLでプログラムしていて
前のページへ戻ると全て入力したものが消えています。

携帯電話でアクセスした場合、メールフォームに入力したデータが
キャッシュに残っていないのは仕方のないことなのでしょうか?
これはCGIのほうで、どうにかするべき問題ですか?
それともHTMLの記述の中でデータ入力したもののキャッシュを
残すように出来るのでしょうか?
896nobodyさん:2006/01/17(火) 09:24:09 ID:???
記入漏れがある場合は、エラーページを作るのではなくて、
その記入用画面をまた表示する。その際、
・ページ冒頭で記入漏れがある旨を伝え、それを埋めるように催促する
・正しいデータが送られた部分にはそのデータを初期値として表示
・正しくないデータの部分にはそれと分かるように印をつけて空欄で表示
として、記入漏れのあるところだけ埋めてもらうようにするのがいい。
897nobodyさん:2006/01/17(火) 09:55:43 ID:nYyzHE1C
>>896
なるほど、引き渡した変数をそのまま利用して、記入漏れの箇所に対してのみ
再度入力を求める形にすればいいということですね。

ただ気になるのが、きっと print ""; を使うことになると思いますが、
例えば名前が 山田 太郎 と入力されたものとして、
年齢が未入力だった場合、どういう記述の方法をとりますか?

名前の箇所の 山田太郎 は正しかったものとして
ただHTMLで文字として表示させて

未入力だった箇所の年齢は 再度入力ボックスを出すという形ですか?
また変数を、こういう形で受け継がせる方法に最適な案などご存知でしたら
ぜひご教授ください  
898nobodyさん:2006/01/17(火) 12:16:30 ID:???
>>897
その辺は好きずき。自分がやるならエラーがなくならない限り
すべての項目を再入力可能にしておくけど。
899nobodyさん:2006/01/17(火) 12:21:24 ID:???
伸びてると思ったらまたアレか・・いい加減しつけぇよ
900nobodyさん:2006/01/17(火) 12:29:07 ID:???
ファイルが読み書き込み可能かチェックをするとき、

unless(
-e $file and
-f $file and
-r $file and
-w $file
) {
print 'NG';
}

のようにファイルがあるか⇒ファイルか⇒読み書き込み可能か
と全部チェックすべきでしょうか?
それとも、-r, -w のみのチェックでも大丈夫でしょうか?
901nobodyさん:2006/01/17(火) 12:45:01 ID:???
>>900
-f が真になるなら -e は常に真。
無駄なシステムコールを省く為、二つ目以降は _ を使う。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item__i__X__i__FILEHANDLE

よって unless (-f $file && -r _ && -w _) { ... }
902900:2006/01/17(火) 12:57:57 ID:???
>>901

下線だけからなる特別なファイルハンドルがあるとは知りませんでした。。。

非常に勉強になりました。
ありがとうございす。
903nobodyさん:2006/01/17(火) 13:00:56 ID:???
>>898
またもや、項目を入力可能にしておくとは言えども、
前ページで入力したデータが エラーの出たとこ以外には
デフォで入ってる状態で表示させるんですよね?

HTMLでそんなタグありましたっけ?
904nobodyさん:2006/01/17(火) 13:07:33 ID:???
ある
905nobodyさん:2006/01/17(火) 13:11:38 ID:nYyzHE1C
906nobodyさん:2006/01/17(火) 13:14:18 ID:???
>>904

<input value=hensuu>

のvalueとこに変数を渡して、そのまま

print ""; 使ってHTML出力してしまえば、前ページで入力したデータが
デフォで入ってる状態になるところまでは分かったのですが、

checkboxやselect typeだと出来なくないですか? 
907nobodyさん:2006/01/17(火) 13:27:43 ID:???
まずはプログラミングの基礎だな。
908nobodyさん:2006/01/17(火) 13:33:08 ID:???
>>907

<select NAME="県別" SIZE="1">
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>

前ページで
「北海道」を選んでいたが、 メアドの項目でエラー出たとき
県別のvalueに与えられていた”北海道”のデータを そのまま引き継ぐには

selectedを使って、どうのような方法がありますか?
909nobodyさん:2006/01/17(火) 13:38:23 ID:???
>>908
s/( VALUE="$form{'県別'}")/$1 selected/;
910nobodyさん:2006/01/17(火) 13:41:29 ID:???
HTMLのリファレンスを探してこい。
911nobodyさん:2006/01/17(火) 13:42:16 ID:???
北海道がクエリーに入ってたら北海道の項に selected="selected" 挿入して
ユーザーに投げてやればいいでしょ。

何を質問してるのか解らん。
912nobodyさん:2006/01/17(火) 13:44:04 ID:???
>>909
ありがとうございます。
ただ、その場合は 北海道だけがプルダウンセレクトで出てきて
他の県を選べなくなりますよね?

もし、県別のとこも、エラー出たあとに、他の県に修正できるようにする方法は
ありませんか?
913nobodyさん:2006/01/17(火) 13:45:22 ID:???
馬鹿すぎww
914nobodyさん:2006/01/17(火) 13:47:09 ID:???
さすがwebprog板・・
915nobodyさん:2006/01/17(火) 13:51:21 ID:???
>>910
いろいろ見ているのですが、申し訳ない。

>>911
分かりづらい説明ですいません。

最初のフォーム入力ページでは
<select NAME="県別" SIZE="1">
<option VALUE="" selected>北海道</option>
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
というふうに デフォでは "--"と表示されていて”県別”の中身は空ですが、
もし、北海道をここで選んで、他の項目でエラーが出た場合、
表示されるページで ”北海道”がデフォで選ばれてる状態にして
なおかつ、他の県にも修正が効く状態にしておきたいんです。
916nobodyさん:2006/01/17(火) 13:52:14 ID:???
本当に初歩な質問で申し訳ないんですが、調べてみてるんですが
分からないんです。すいません。
917nobodyさん:2006/01/17(火) 13:56:21 ID:???
Perlコーディング以前の質問だろ
スレ違い、さっさと失せろ
918nobodyさん:2006/01/17(火) 13:59:16 ID:???
申し訳ない。スレ汚してすいませんでした。
スレ移動します。
919nobodyさん:2006/01/17(火) 14:00:37 ID:???
>>915
選ばれたものが selected になればよいと言って分かる?
分からなければ制作板で HTML の勉強しといで
920nobodyさん:2006/01/17(火) 14:02:06 ID:???
>>919
はい、分かります。
921nobodyさん:2006/01/17(火) 14:03:23 ID:???
>>919

>>915で、記述ミスしてました。
北海道のところがselectedじゃなくて、  "--"の行がデフォではselectedでした。
922nobodyさん:2006/01/17(火) 14:06:39 ID:???
>>921
おまえはいっぺん死ね
923nobodyさん:2006/01/17(火) 14:07:19 ID:???
>>922
すいません。。。。
924nobodyさん:2006/01/17(火) 14:08:05 ID:???
こういうやつの書いたスクリプトも結局はアップされて走らされるんだからなぁ
酷使されてる鯖カワイソス
925nobodyさん:2006/01/17(火) 14:09:53 ID:???
スクリプト全部アップしてみ。
俺が書きなおしてやる。
926nobodyさん:2006/01/17(火) 14:12:35 ID:???
まず普通に本を読んでこのレベルなら諦めた方がいいと思うね
927nobodyさん:2006/01/17(火) 14:15:18 ID:???
自分の頭の悪さを責めろ
928nobodyさん:2006/01/17(火) 14:28:29 ID:???
>>925
今、まとめてます。
ちょっと待ってください。

ありがとうございます
929nobodyさん:2006/01/17(火) 14:31:39 ID:???
>>925
これがHTMLの部分です。

<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD>
<BODY>
<form action="toiawase.cgi" method="post">
<BR>
氏名:<input size="20" type="text" name="氏名">
<BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="" selected>--</option>
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
<BR>
持ってる免許:
<input type="checkbox" name="免許車" value="CAR">
<input type="checkbox" name="免許バイク" value="BIKE">
<input type="checkbox" name="免許船" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
930nobodyさん:2006/01/17(火) 14:35:20 ID:???
>>929
</option>って要らなくね?
931nobodyさん:2006/01/17(火) 14:36:02 ID:???
それと<select>タグ、ちゃんと閉じてね。
932nobodyさん:2006/01/17(火) 14:36:59 ID:???
<FORM>(ry
933929:2006/01/17(火) 14:40:00 ID:???
上の入力フォームで

名前= 未記入
県別= 北海道を選んだ
持ってる免許= 免許車、 免許バイク

を選んだとして、「名前の未記入のみ」に対して
もう一度記入してくださいという、画面を出力して出したいんです。
その際には、 県別が「北海道」ということと、免許が「免許車、免許バイク」と分かっているので
と吐き出したいんです。
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD> <BODY>
未記入の項目がありました。<BR><BR>
<form action="toiawase.cgi" method="post"> <BR>
氏名:<input size="20" type="text" name="氏名"> <BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="">--</option>
<option VALUE="北海道" selected>北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
</select> <BR>
持ってる免許:
<input type="checkbox" name="免許車" value="CAR" checked>
<input type="checkbox" name="免許バイク" value="BIKE" checked>
<input type="checkbox" name="免許船" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
934nobodyさん:2006/01/17(火) 14:40:52 ID:???
>>933
最後は</FORM>の閉じ忘れでした。
すいません
935nobodyさん:2006/01/17(火) 15:01:05 ID:???
>>934

自分なりにどういうスクリプト書いてみたかもアップして。
アップローダー使ってね。
936nobodyさん:2006/01/17(火) 15:08:07 ID:???
>>935  >>929を訂正して 下のように
免許部分を1から3にします。

<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD>
<BODY>
<form action="toiawase.cgi" method="post">
<BR>
氏名:<input size="20" type="text" name="氏名">
<BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="" selected>--</option>
<option VALUE="北海道">北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
<select>
<BR>
持ってる免許:
<input type="checkbox" name="免許1" value="CAR">
<input type="checkbox" name="免許2" value="BIKE">
<input type="checkbox" name="免許3" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
930 名前: nobodyさん [sage] 投稿日: 2006
937nobodyさん:2006/01/17(火) 15:12:02 ID:???
935 名前:nobodyさん[sage] 投稿日:2006/01/17(火) 15:01:05 ID:???
>>934

自分なりにどういうスクリプト書いてみたかもアップして。
アップローダー使ってね。
アップローダー使ってね。
アップローダー使ってね。
アップローダー使ってね。
アップローダー使ってね。
938nobodyさん:2006/01/17(火) 15:17:07 ID:???
>>936の「免許」の部分は1〜3じゃなくて、全て「免許」で統一でした。

フォームから引き渡した数を
$form{'氏名'} = ""
$form{'県別'} = "北海道"
$form{'免許'} = "CAR,BIKE"

としたときに、 HTMLで下のように吐き出すようなスクリプトを教えてください。

<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD> <BODY>
未記入の項目がありました。<BR><BR>
<form action="toiawase.cgi" method="post"> <BR>
氏名:<input size="20" type="text" name="氏名"> <BR>
県別:<select NAME="県別" SIZE="1">
<option VALUE="">--</option>
<option VALUE="北海道" selected>北海道</option>
<option VALUE="青森県">青森県</option>
<option VALUE="岩手県">岩手県</option>
<option VALUE="宮城県">宮城県</option>
<option VALUE="秋田県">秋田県</option>
<option VALUE="山形県">山形県</option>
</select> <BR>
持ってる免許:
<input type="checkbox" name="免許" value="CAR" checked>
<input type="checkbox" name="免許" value="BIKE" checked>
<input type="checkbox" name="免許" value="SHIP">
<BR><BR>
<input TYPE="submit" VALUE="送信">
<FORM></BODY></HTML>
939nobodyさん:2006/01/17(火) 15:19:10 ID:???
>>935
スクリプト自体はまだ、出来あがってはいませんので
アップできませんが、上のような形でHTMLを吐き出してくれる方法だけでも
教えてもらえませんか?
940nobodyさん:2006/01/17(火) 15:25:27 ID:???
>>939
教えてもらえません。
お前の屑スクリプトが動くところがみたいんじゃなくて、
お前がそれ相応の努力をしたかどうかがみたいんだ。
だから書きかけでもうpが先。
941nobodyさん:2006/01/17(火) 15:26:55 ID:???
氏名のところが記入済みのときは、ただ単に下のように
inout valueのところに名前の変数をデフォで表示させておけば
問題ないと分かったんですが・・・・

$NAME=$form{'氏名'};

print "
<HTML><HEAD>
<TITLE>問い合わせ</TITLE></HEAD> <BODY>
未記入の項目がありました。<BR><BR>
<form action=toiawase.cgi method=post> <BR>
氏名:<input size=20 type=text name=氏名 value=$NAME> <BR>
県別:<select NAME=県別 SIZE=1>
<option selected>--</option>
<option VALUE=北海道>北海道</option>
<option VALUE=青森県>青森県</option>
<option VALUE=岩手県>岩手県</option>
<option VALUE=宮城県>宮城県</option>
<option VALUE=秋田県>秋田県</option>
<option VALUE=山形県>山形県</option>
</select> <BR>
持ってる免許:
<input type=checkbox name=免許 value=CAR>
<input type=checkbox name=免許 value=BIKE>
<input type=checkbox name=免許 value=SHIP>
<BR><BR>
<input TYPE=submit VALUE=送信>
<FORM></BODY></HTML>
";
942nobodyさん:2006/01/17(火) 15:28:03 ID:???
>>903-941
丸投げ度に応じて適切と思われるスレに移動してくれ。

自分の作ったCGIスクリプトをデバッグするスレ
http://pc8.2ch.net/test/read.cgi/php/1011174442/

手伝ってくれるかた募集
http://pc8.2ch.net/test/read.cgi/php/1083303786/

【CGI】合同開発室
http://pc8.2ch.net/test/read.cgi/php/1001950501/

■こんなCGI作ってください■ Part.2
http://pc8.2ch.net/test/read.cgi/php/1133361560/

依頼されたツールを誰かが作るスレ
http://pc8.2ch.net/test/read.cgi/php/1078997682/
943nobodyさん:2006/01/17(火) 15:28:16 ID:???
>>940
わかりました。
がんばってみて、うpってみます
944nobodyさん:2006/01/17(火) 15:40:29 ID:???
とりあえずボロボロですが、

http://www.uploda.org/file/uporg288825.txt.html

パスはwebprog です。
945nobodyさん:2006/01/17(火) 15:52:54 ID:???
>>894 の $buffer のスコープを狭くして参照を返してみる。

sub decode {
  my @pairs = split(/[&;]/, do {
    if ($ENV{'REQUEST_METHOD'} eq 'POST') {
      if ($ENV{'CONTENT_LENGTH'} > 1024) { return undef; }
      my $buffer;
      binmode(STDIN);
      read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
      $buffer;
    } elsif ($ENV{'REQUEST_METHOD'} eq 'GET' or $ENV{'REQUEST_METHOD'} eq 'HEAD') {
      $ENV{'QUERY_STRING'};
    } else { return undef; }});
  my %in;
  foreach my $pair (@pairs) {
    my ($name, $value) = split(/=/, $pair, 2);
    $name =~ tr/+/ /; $value =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $in{$name} = $value;
  }
  return \%in;
}
946nobodyさん:2006/01/17(火) 15:54:08 ID:???
とりあえず KENT は参考にしないでほしい
947nobodyさん:2006/01/17(火) 15:55:46 ID:???
>>945

クエリーストリング付きのURIにPOSTでデータ投げたときってどうなるの?
948nobodyさん:2006/01/17(火) 15:58:09 ID:???
CGI の勉強をしたいんですが、KENT ってホームページで勉強してもいいですか?
949nobodyさん:2006/01/17(火) 15:58:23 ID:???
www突っ込むところそこじゃないだろ。
950nobodyさん:2006/01/17(火) 15:59:24 ID:???
>>947
投げて実験してみればわかるのでは?
951nobodyさん:2006/01/17(火) 16:01:20 ID:???
やらなくても解るがな。
952944:2006/01/17(火) 16:11:28 ID:???
すいません、自分にレスが来ているのかどうかさえ、
文面から判断できません。
953nobodyさん:2006/01/17(火) 16:14:06 ID:???
>>944
他行ったら? たぶんアンタは2ch向いてない。
954nobodyさん:2006/01/17(火) 16:22:28 ID:???
>>952
2ch で勉強しようと思っているのならそれはやめた方がいい
今の君は付け焼き刃でどうにかなるレベルじゃない

もっと時間を掛けて、身銭を切って何冊か参考書を買うことが必要だ
955nobodyさん:2006/01/17(火) 16:22:38 ID:???
>>945
続けたいなら下のスレでもリサイクルしてくれ。

もっと軽くて渋いCGI.pmを創ろう
http://pc8.2ch.net/test/read.cgi/php/1009255955/
956nobodyさん:2006/01/17(火) 16:23:01 ID:???
>>952

一応書いてる。まぁ他の作業の暇にだから夕飯食い終わった後にまた来てみ。
957nobodyさん:2006/01/17(火) 16:25:27 ID:???
>>956
ありがとうございます。
了解しました。
958nobodyさん:2006/01/17(火) 16:26:15 ID:???
>>954
はい、ありがとう。
959nobodyさん:2006/01/17(火) 17:00:03 ID:???
('A`)
960nobodyさん:2006/01/17(火) 18:08:25 ID:???
>>955
それは良いアイデアだ。質問スレでこれ以上無駄な議論が
繰り返されないために、次スレのテンプレに以下を追加して欲しい。

CGI.pm批判、代替ルーチンなどCGI.pmに関する話題は以下のスレで。

もっと軽くて渋いCGI.pmを創ろう
http://pc8.2ch.net/test/read.cgi/php/1009255955/
961nobodyさん:2006/01/17(火) 18:29:31 ID:???
>>960
無駄な議論かどうかって、どう判断するの?
962nobodyさん:2006/01/17(火) 18:43:33 ID:??? BE:463642676-
しーっ!
963nobodyさん:2006/01/17(火) 18:47:36 ID:???
うむ。

無駄な議論の定義を作っておかないとね。
964nobodyさん:2006/01/17(火) 18:55:19 ID:???
フォームで複数選択可能な項目が有る時には同じ名前で違った値が入力されますが、cgi-libでは
$in{$key} .= "\0" if (defined($in{$key}));
の様にしてセパレータを使って複数の値をセットしてました。
cgi-libを見るまえに同じことを自分で書いてたのですが、自分のソースは\0ではなく\tを使ってたました。
\tより\0を使ったほうがいいのでしょうか?
965nobodyさん:2006/01/17(火) 19:01:35 ID:???
>>963
無駄な議論の定義は今回は必要ないだろ。
CGI.pm と query の処理関係の、質問以外はそっちに誘導してしまえばいいのだ。
ここは質問スレ。
966nobodyさん:2006/01/17(火) 19:20:57 ID:???
>>965
初心者スレだから、query処理の質問に対する
答えはCGI.pm使えで良いんじゃない?
それに満足できない人はそっちのスレへ誘導と。
967nobodyさん:2006/01/17(火) 19:24:53 ID:???
流れを読む限りCGI::Minimal派と自作派でCGI派は居なかったはずと訂正しとく。
あと初心者には組み込み関数のほうが使いやすいと思われ。
968nobodyさん:2006/01/17(火) 19:28:31 ID:tDsfmN2q
SSIでブラウザごとに違うページへ飛ばすプログラムを作成したいと考え、index.shtmlへアクセスした際に
環境変数でブラウザ等を判別し、それぞれ別のファイルへ飛ばす方法を検索したのですが、見つける事ができませんでした。

CGIなら Location:各ページのURI で出来たのですが、SSIではどうすれば良いでしょうか?
969nobodyさん:2006/01/17(火) 20:06:47 ID:???
>>965
何を「無駄な議論」にするか定義しておかないと、
初心者の質問を装って面倒臭い話始めちゃうぞ。
970nobodyさん:2006/01/17(火) 20:08:20 ID:???
玄人から見るとこのスレが無駄
ってなっちゃうから何が不要なのをハッキリと
971nobodyさん:2006/01/17(火) 20:10:18 ID:???
無能なスクリプトしか書けない人間しか来ないんだし、
WebProg 自体が不要じゃね?
972nobodyさん:2006/01/17(火) 20:23:49 ID:???
>>964
今時は配列に入れる。
973nobodyさん:2006/01/17(火) 20:26:19 ID:???
今時は Ajax でほげるので、form の中身をまとめて post なんて
間抜けなことはしない。
974nobodyさん:2006/01/17(火) 20:51:13 ID:???
>>973
Ajaxを使うとすると、選択する度にサーバへ情報を送る訳ですね?
となると、情報の保持にはセッションを利用するんでしょうか。
975nobodyさん:2006/01/17(火) 21:04:12 ID:???
>>957

いちおうできたよ。

http://up.spawn.jp/file/up9550.zip

まだまだ未熟です orz
976nobodyさん:2006/01/17(火) 21:22:18 ID:???
>>975
ありがとうございました。
全然見たこともないような書き方をしていたので
びっくりでした。
今日はもう寝るところでしたので
明日の朝また見直したいと思います。
お疲れ様でした。
977nobodyさん:2006/01/17(火) 22:31:33 ID:???
>>974
ふつーに考えて、何らかのセッションを維持しなければそういうことできないよね。
978nobodyさん:2006/01/17(火) 22:38:00 ID:???
>>975
そんな暇なことせずに HTML::FillInForm を使えば?
http://search.cpan.org/search?query=HTML%3A%3AFillInForm&mode=all

FormValidator に関しても、各種あります。
http://search.cpan.org/search?query=FormValidator&mode=all
979nobodyさん:2006/01/17(火) 22:38:46 ID:???
> 今日はもう寝るところでしたので
> 明日の朝また見直したいと思います。

結局、こういう人間が質問してるんだよね。
980nobodyさん:2006/01/17(火) 22:57:42 ID:???
>>979
学校の課題だろどうせ
981nobodyさん:2006/01/17(火) 23:00:51 ID:???
寝る時間さえ自由に決めさせてくれないスレはここですか?
982nobodyさん:2006/01/17(火) 23:02:19 ID:???
>>968
<meta http-equiv="refresh" 〜> かな。

>>969
話の筋からするとquery処理かな。
>>955 のスレにも >>945 みたいなのを貼ってあったし。
983nobodyさん:2006/01/17(火) 23:08:08 ID:???
高々数百kのクエリー受け付けるのに何倍もメモリー使う俺関数は神だな。
984nobodyさん:2006/01/17(火) 23:13:45 ID:???
今時メモリーなんて無限にあると考えてもよいのでは?
985nobodyさん:2006/01/17(火) 23:15:16 ID:???
メモリよりはプロセス数の方が怖いね
986nobodyさん:2006/01/18(水) 00:03:32 ID:???
メモリのほうが恐いよ。
987nobodyさん:2006/01/18(水) 00:10:54 ID:???
搭載メモリに応じて走らせられるプロセス数が決まる訳で、
そいうこと考えられない人間はエスパーにしか見えないんだが
988nobodyさん:2006/01/18(水) 00:22:07 ID:???
うーん。どうだろ。
ほとんどの鯖では、プロセス数を設定で抑えてるからなぁ。
989nobodyさん:2006/01/18(水) 00:31:17 ID:???
意味無い議論な上に極端だなぁ。
メモリがいくらあってもプロセス数の制限があっても、
処理が遅かったら微妙だしな。
バランスよ。バランス。
そんな事もわからんのか。
990nobodyさん:2006/01/18(水) 01:17:50 ID:???
藻前の脳内常識が通用するとは限らんよ。
991nobodyさん:2006/01/18(水) 02:04:08 ID:???
言い切らない辺りに自信のなさを感じますね
992nobodyさん:2006/01/18(水) 02:07:24 ID:???
ガキじゃないってこと
993nobodyさん:2006/01/18(水) 02:08:34 ID:???
「自身がある」ならば、「言い切る」ということにしたいんだろうか。
994nobodyさん:2006/01/18(水) 02:09:33 ID:???
みんな次スレを忘れてないか。
漏れが建ててくる
995nobodyさん:2006/01/18(水) 02:11:02 ID:???
次スレなんて必要ないのでは?
996nobodyさん:2006/01/18(水) 02:11:44 ID:???
通用するとは限らない=通用する場合もあるし、しない場合もある

否定になっとらんね。
997nobodyさん:2006/01/18(水) 02:12:31 ID:???
>>996
> 否定になっとらんね。

何を否定?

意味不明ですね。
998nobodyさん:2006/01/18(水) 02:16:13 ID:???
>脳内常識
思いっきり否定してるなw
999nobodyさん:2006/01/18(水) 02:18:59 ID:???
>>990さんは華麗に揚げ足取りしたつもりでした。
1000nobodyさん:2006/01/18(水) 02:20:25 ID:???
へー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。