[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 08/02 03:26 / Filesize : 136 KB / Number-of Response : 348
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:nobodyさん mailto:sage [2008/03/03(月) 05:07:32 ID:???]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。

113 名前:nobodyさん mailto:age [2008/04/13(日) 13:47:51 ID:???]
元気でやっとるかね^^
ちょっとわからないことがあってまた落書きしに来たのだw
解答いただけたら嬉しいけど期待できないのはわかっているので
気長に解答者さん待ってみるよ^^;

@抽出部分の検索文字を <object (.+?)object> にすると
(.+?)の部分だけが取れて
始めに出てくるはずの <object と 最後の object> が現れないんだよね
変数宣言の名前を全部変えてみたけど動くので特別な変数名は使っていないようだ
perl自体がそういう仕様なのかね??

Aそれから複数行抽出なんだけど
1行もしくは2行もしくは3行ってのはダメなのかな?
(s<title(.+?)title>|<title(.+?)\n(.+?)title>|<title(.+?)\n(.+?)\n(.+?)title>s);

Bそれからまだあるんだよね
<title>
<object>
<span>
この3箇所を抽出したいんだけど何故か最後に書いたトコだけが取れるんだ
{ と } の間に3つとも書いているんだけど
ファイルクローズして改めてファイルオープンするって手順にするべきなのだろうか?
今はソースぐちゃぐちゃでワケワカメになってきたw

全集600ダメだ
オープン オブ ダイ で ダイの部分が予約語なのか調べて見てもわかんない
他の本でdieの意味がわかる
せめて予約語は全部掲載してもらいたいもんだ

それでは@〜Bよろしく願います
また会おう^^;
シーユーあげ印w

114 名前:nobodyさん mailto:sage [2008/04/13(日) 15:31:39 ID:???]
(〜´-`)〜

115 名前:nobodyさん mailto:sage [2008/04/13(日) 18:34:17 ID:???]
向うでデリミタの質問をしたのもコイツか?
お前のせいで、他の人の質問でも答える気にならんのだよ自重してくれんかね。

116 名前:nobodyさん mailto:sage [2008/04/13(日) 18:44:46 ID:???]
便乗したのがコイツだろ…進歩の無いコテが答えたからいいけどさ
あのコテも短レスで時々全然ボケた答え返すんだよなあ消えてくんねえかな

117 名前:nobodyさん mailto:sage [2008/04/14(月) 01:20:54 ID:???]
('A`)前進しないよ
これの27行目 closedir(DIR); でエラーになるんだけどなんで?
#!/perl/bin/perl
use strict;
use warnings;
print "<html>\n";
&traverse_html(".");
print "</html>\n";

sub traverse_html {
my $dirname = shift;
my $delim = '/';
if ($dirname =~ /[\/\\]$/) {
$delim = '';
}
print "<ul>\n";
opendir(DIR, $dirname) or die "$dirname: $!";
foreach my $entry (readdir(DIR)) {
next if ($entry eq '.');
next if ($entry eq '..');
my $filename = "$dirname$delim$entry";
if (-d $filename) {
print "<li>$entry\n";
&traverse_html($filename);
} else {
&do_html($filename, $entry);
}
}
closedir(DIR);
print "</ul>\n";
}


118 名前:nobodyさん mailto:sage [2008/04/14(月) 08:31:02 ID:???]
>>117 
再起してるからじゃね?先にファイル一覧を取得してclosedirしてから再起呼び出しするか、
ディレクトリハンドル(DIR)をローカル変数に浮かすかすればインジャネ?
traverse_html ※1 の中で traverse_html ※2 を呼び出す
→ ※1のDIRを※2で上書きする
  → ※1に戻ったとき ※2のDIRはclose済み
テストしてないから動くかは知らんけどこんな感じ。
sub traverse_html {
my $dirname = shift;
my $delim = '/';
my @entrys = undef;
my $i = 0, $j = 0;
if ($dirname =~ /[\/\\]$/) {
$delim = '';
}
print "<ul>\n";
opendir(DIR, $dirname) or die "$dirname: $!";
foreach my $entry (readdir(DIR)) {
next if ($entry eq '.');
next if ($entry eq '..');
$entrys($i++) = $entry;
}
closedir(DIR);
for ($j=0;$j<$i;j++){
my $filename = "$dirname$delim$entrys($j)";
if (-d $filename) { print "<li>$entrys($j)\n"; &traverse_html($filename); }
else { &do_html($filename, $entrys($j)); }
}
print "</ul>\n";
}


119 名前:nobodyさん mailto:sage [2008/04/14(月) 13:27:25 ID:???]
>>118さん
レスありがとう^^
試してみたら
my @entrys = undef;
my $i = 0, $j = 0;
部分でエラーになって以下関連箇所もエラーになるんだよね

>>117のコードでのエラー文こんな感じ
closedir() attempted on invalid dirhandle DIR at itiran-tes.pl line29
構文チェックではエラーにならない
デバッグの識別子チェックというのを実行してみたらエラー箇所がわかって
タイトルとファイル名は取得されていてリンクも貼られているようだ

>>117の closedir(DIR);がエラーにならないように出来たら
ワンステップだけど前進出来そうなんだよね
もうちょっと色々試してみるよ
朝のあわただしい中わざわざレスしてくれてありがとう
丁寧に教えてくれて感謝してまふ
んじゃ

120 名前:117 mailto:sage [2008/04/14(月) 13:33:05 ID:???]
>>117には続きがあるんだけど
2chの文字数制限で記載できなかったんだ

#ここに>>117の部分がある
sub do_html {
my ($filename, $entry) = @_;
return unless ($filename =~ /\.html?$/);
open(FILE, $filename) or die "$filename: $!";
my $file = join('', <FILE>);
close(FILE);
my $title;
if ($file =~ m|<title>(.*?)</title>|si) {
$title = $1;
$title =~ s/[\r\n]//g;
} else {
$title = $entry;
}
print qq|<li><a href="$filename">$title</a>\n|;
}



121 名前:118 mailto:sage [2008/04/14(月) 15:57:05 ID:???]
とりあえず、Linux Perl v5.8.6で動かしてみた。
117と120をつなげて動かしたら動いたよ。
OSやPerlインタプリタのの問題かな?



122 名前:nobodyさん mailto:sage [2008/04/14(月) 16:17:14 ID:???]
>>121
「オープン オブ ダイ」の話を書いてから12時間で
readdir でぶん回して再帰もしちゃうんだぞ、ってところが問題なんだと思うよ。

123 名前:117 mailto:sage [2008/04/14(月) 16:47:14 ID:???]
>>121さん
そうなんだ
わざわざテストしてくれたんだ(;´д⊂ヽありがとう
WindowsXP
アクティブパール5.88
シグウィンでもっかいテストしてみて作者にメールしてみるよ
ありがと

>>122
何が問題なのだ?
質問も解答もしないのに横から茶々入れてるあなたのほうがよっぽど問題なのだが・・・
購入した本にサンプルが付いていた
動かないので自分で解決できないか模索した
どこがおかしいのだ
あんたの頭かw



124 名前:nobodyさん mailto:sage [2008/04/14(月) 17:20:05 ID:???]
向うで再帰の質問をしたのもコイツか?
お前のせいで、他の人の質問でも答える気にならんのだよ自重してくれんかね。
>その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。

125 名前:117 mailto:sage [2008/04/14(月) 17:21:37 ID:???]
cygwinで動いたんだけどcdのhtmlからの取得はしていなかった
サビフォルダーに置いていたhtmlからの取得は全部おk
コマンドプロンプトで確認したんだけど
ファイルは作成されていない
コマンドプロンプトの操作画面に現れたものを
ファイルに保存するのはどうすればいいですか?

取りあえず>>122は答えなくていいよ
どうせ野次るだけなのは明白だ
自分でも探してみるけど
私に理解できるように答えれる方おられましたらよろしくお願いします

126 名前:nobodyさん mailto:sage [2008/04/14(月) 17:22:29 ID:???]
>その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。

127 名前:nobodyさん mailto:sage [2008/04/14(月) 17:23:21 ID:???]
>>124
それ勘違い
再起わかんないので具体的な質問できないよ
その質問には答えてあげればイイヨ
どうせ私が見てもわかんないのでヨロシコ

128 名前:nobodyさん mailto:sage [2008/04/14(月) 17:25:31 ID:???]
再帰を「再起」と書く初心者が同じ日に二箇所に現われるもんかねえ。

129 名前:nobodyさん mailto:sage [2008/04/14(月) 17:27:06 ID:???]
>>126
「超初心者用」と「初心者用」購入したんだけど
ささっと変数を解説したらCGIの話ばかりで
ファイル操作は最後のほうでちょびっとだけ解説してるんだ
なぜかperlの解説本は「CGI」「CGI」の連呼でキモい

130 名前:nobodyさん mailto:sage [2008/04/14(月) 17:29:05 ID:???]
>>128
誤字がどうしたのだ?
そんなの関係ないと思う
小心者だねw

131 名前:むこうの928 mailto:sage [2008/04/14(月) 18:04:05 ID:???]
>>124,>>128
激しくゴメン。別人です。
何日か前から、こっちがこんなことになってるから、むこうで聞いてみた。
(まあ実際WebProgではないんだけど)

しまった”再帰”か〜。
つっても再起でコケてるわけではなくて、(まただw)
どうも =~ s///e の”e”でこけてるようなんだ。

正規表現絡みで、しかもこっちこんな状況だったからあんま書き込みたくなかったんだけど
案の定つっこまれてしまった。

まあいいや、今は時期が悪かったってことで、暫く消えます。



132 名前:nobodyさん mailto:sage [2008/04/14(月) 20:11:42 ID:???]
一応、お詫びします。迷ったけどこっちに書きます。
貴方が本当に別人なら理解出来るでしょう。
======================
当方、確認の術を持たないので(win環境なし)。
s///e の問題にしろ再帰の問題にしろ、再帰を使うほどの
ネタでは無さそう。あくまでも適当に書いた例だけど。
# Wide character warning が出るのは御愛嬌。
use utf8 ;
my %hash
 = map{
  my $new = $_ ;
  $new =~ s/(\d)(\d)/$1十$2/ if length $new == 2 ;
  $new =~ s/1十(\d)/十$1/ ;
  $new =~ tr/123456789/一二三四五六七八九/ ;
  $new =~ s/0// ;
  $_, $new ;
 } 1 .. 99 ;

while(my $line=<DATA>){
  $line =~ s/(\d+)条/$hash{$1}条/; print $line ;
}
__DATA__
3条
24条
10条

133 名前:nobodyさん mailto:sage [2008/04/14(月) 20:48:09 ID:???]
こっちでいいのかな?

>>131
ActivePerl5.8.8(build816) で試そうとしたんですけど、標準入力からうまく食ってもらえず。

で、__DATA__ と <DATA> にしたり
open(IN, '<', 'list.utf8'); binmode(IN, ":utf8"); 以下略にしたりしてみたら
意図どおり(のはず)の出力になりました。perl.exe も落ちず。

# CP932 な環境で binmode(STDIN, ":utf8") って考えたこと自体がないのでよくわからない。

>>115>>124
諸事情により疲れすぎて疑心暗鬼になってるように見えますよ。
諸事情のほうは継続の気配なので、少し休まれては如何かと。

134 名前:130 mailto:sage [2008/04/15(火) 02:25:32 ID:???]
こっちにレスがついてた。みんなサンクス

>>132
イエッサー。わかりますとも。自分でも向こうに書き込んだ後に、ハッシュ使えばs///eも再帰も必要ないかなって思った。
処理速度もこっちのほうが速いし。でも自分で書いたのはこんなの。うーん、いまイチスマートにならないなあ。

my $kanj;
for (1..99){
    my $kan = $_;
    $kan =  substr($_,0,1) . '十' . substr($_,1,1) if($_ >= 10);
    $kan =~ tr/123456789/一二三四五六七八九/;
    $kan =~ tr/0//d;    $kan =~ s/一十/十/;    $kanj->{"$_"} = $kan;
 }

135 名前:130 mailto:sage [2008/04/15(火) 02:26:02 ID:???]
>>133
あれ、ちゃんと動きましたか?
うちでは昼間とは別のPC(PerlのVerは同じ)でやってみたけど、やっぱり例のWindowsダイアログが出て落ちる。
で、いろいろあがいてみたところ、上では、再帰ではないっぽいこと言ったけど、やっぱり再帰に問題ありかと。
特にif($num>=20)のところで、$1と$2を同じ関数に再帰してるとこで、次の正規表現マッチで$1$2あたりが壊れるんではないかと。
(ちなみに、これまたCentOS4,Perl-5.8.8-5.rpmだと期待通りに動く)

上で再帰ではないと思ったのは、あのスクリプトを、use utf8;とbinmode関係コメントアウトして実行してみると、
(当然tr/123.../のところで文字列がぶっ壊れるけど)、最後まで落ちずに走ることと、
以前に正規表現($1$2や$'$`$&も)使いまくりで、さらに6-7段ぐらいネストした関数書いた時も、期待通りに動いてくれたんで、
ちゃんと覚えてくれてるものかと思ってた。これからは、どうやらこれを改めないといけないようだ。

> # CP932 な環境で binmode(STDIN, ":utf8") って考えたこと自体がないのでよくわからない。
自分は、Win上でもtextは基本的にUTF-8で保存してるもんで、(本番環境がLinuxなのもあるけど)ワンライナーっぽく書くときは、
コードの中でopenやら、encode(decode(...))やら書くのメンドいんで、perl script.pl < infile.txt > puts.txt みたな感じを多用してます。
ちなみに、向こうのコードをopen(IN...)とかでやっても、ウチの環境ではやっぱりperl.exeが落ちるのは変わらない。

136 名前:134,135 mailto:sage [2008/04/15(火) 02:27:42 ID:???]
ごめん、激しくゴメン。
名前欄>>131の誤りです。
やっぱり消えます。

137 名前:nobodyさん mailto:sage [2008/04/15(火) 04:16:40 ID:???]
>>135
大変失礼しました、重ねてお詫びします。

>>133
>諸事情により疲れすぎて疑心暗鬼になってるように見えますよ。
>諸事情のほうは継続の気配なので、少し休まれては如何かと。
ほんとにその様です。穴があったら入りたいw

138 名前:nobodyさん mailto:sage [2008/04/15(火) 04:17:12 ID:???]
俺も穴があったら入りたい(性的な意味合いで)

139 名前:nobodyさん mailto:sage [2008/04/15(火) 15:19:10 ID:???]
これからジュンク堂とヨドバスカメラとbook1stとアサヒヤと紀伊国屋行ってみる
りゃまbonがいいんだね
先日、立ち読みしたラクダの本かな?
アレファイル操作詳しく載ってるの?
取りあえず今日はperlの絵本というのを探してみようかと思う
ま行ってみるよ
んじゃ

140 名前:133 mailto:sage [2008/04/15(火) 17:04:26 ID:???]
事故レス。
> 標準入力からうまく食ってもらえず。

test.pl < list.utf8 > converted.utf8 # 0バイトのファイル生成で頭抱える。
test.pl < list.utf8 # 何も吐いてくれない。
perl test.pl < list.utf8 > converted.utf8 # …ちゃんと食ってくれますね。

他人様の疲れを気にする前に、寝ぼけた自分をどうにかしろと。

>>135
要件通りに動くことより「なんで perl.exe が落ちるのはどうして?」が本題ですよね。
ちと時間があったので追試しました。

# 上記寝ぼけから醒めたので STDIN から食う元通りのコード
# 食わせたのは for (1..99) { print "ふんにゃか市$_条\n" } で作ったファイル

5.8.8-816 on Win2kSP4 → 正常動作。
5.8.8-819 on WinXPSP2 → 正常動作。
# ビルドを上げる
5.8.8-822 on WinXPSP2 → アッー!
# 本当に落ちたので下げた
5.8.8-820 on WinXPSP2 → 正常動作。

build822 だと見事に落ちますねえ。

141 名前:nobodyさん mailto:sage [2008/04/15(火) 19:22:38 ID:???]
みごとな検証、お疲れ様。
質問者様が見てくれるといいが。



142 名前:nobodyさん mailto:sage [2008/04/15(火) 23:20:39 ID:???]
>>140
原因が同じか違うかもさっぱりわからないが、
5.8.8 build822だとStorableを使ったコードで
大量のstorableデータ(50MB強)を読み込ませると読み込みが終わらない、
という現象にあたったことがある。
同一コードで、build817、あるいは5.10.0 build1001, 1002 では問題なかった。

というわけで、個人的にbuild822は信用していない。
参考情報と言うことで。

143 名前:nobodyさん mailto:sage [2008/04/16(水) 16:55:29 ID:???]
*本当の検証*が向こうに出てたので、>>131さんもご覧になるでしょう。
まあ、元々向こうのネタですし。
# きちんと問題の切り分けして再現する最小コード出す辺りが「向こう」なのかも。

自分のは検証でなく、「おらの環境では動いたずら」だけではひどいと思ったので
補足した程度ですから。

>>142
build822 をインスコすると build821 用の release.(html|txt) が入ってて萎えるんですが
CHANGES.txt で build821, 822 だけに書かれてる
> plus additional selected changes from the Perl 5.9 development branch.
これが気になってます。

> Build 821 was only distributed for HP-UX.
ここは…笑うところなのかな。

build822 が5.8系の latest ではあるんですが、自分も同じ印象です。
配布CGI+改造のテスト程度は大丈夫なんでしょうけどね。

144 名前:135 mailto:sage [2008/04/16(水) 20:08:19 ID:???]
みなさん本当にありがとうございます。
向こうで見事な回答を頂きました。(Cコードを読み解く力がないので具体的なことはよくわかりませんが・・。)

>>140
わざわざ試して頂いてありがとうございます。
自分の記憶では、817->819と820->822でバイナリ互換が崩れる(DBIやEncode、Uni-Jpなんかを再ビルドしないといけない)ので、
古いバージョンに戻してまでやってみようと言う気が起きませんでした。
(ちなみに819->820は再ビルド無しでモジュールが動きました。)

>>142,>>143
そうですか、build822はあんまりよろしくないのかな?
向こうの返答では、5.10系でも同様に落ちるらしいので、むしろこのコードで動いているほうがよろしくないってことで
修正されたんではないかと思いますが、実際のところよくわかりません。(動くことによる不具合が思いつかない。)
今度ヒマな時にでも、Linux環境でperl-5.10をソースからコンパイルして同じコード試して見ます。

まあどちらにせよ、再帰の中で、tr///(s///も?)を使うようなコードは書かないようにしないといけないっぽいですね。

145 名前:質問 [2008/04/16(水) 23:05:19 ID:oAcDKLtn]
ブラウザを閉じると、指定したファイルのデータを消すようにしたいのですが
perlで良い方法がありましたら教えてください。


146 名前:nobodyさん mailto:sage [2008/04/17(木) 09:24:21 ID:???]
>>145
サーバにいるPerlさんは、クライアントのブラウザが閉じたかどうかを知らないよ。

147 名前:nobodyさん mailto:sage [2008/04/18(金) 01:33:43 ID:???]
JavaScript併用

148 名前:145 [2008/04/18(金) 07:47:12 ID:ThTU7HIn]
>>146
サーバサイドだからやっぱり無理なんですかね・・ いいモジュールとか有ると期待していたんですが。。。

>>147
JavaScriptのどういったものが教えてください

149 名前:nobodyさん mailto:sage [2008/04/18(金) 10:00:46 ID:???]
閉じたら消すじゃなくて
開いたら消すにすれば?

150 名前:nobodyさん mailto:sage [2008/04/18(金) 14:57:49 ID:???]
JavaScriptならonUnloadで消去用のスクリプトを実行させれば?
もしくは実行終了のタイミングが予測出来るなら
folkなりthreadなりで子プロで消すとかね

そもそも消さなきゃならないデータなんて置かなきゃ良いんだよw
どうせダウンロードされたくない画像やら動画やらなんだろうけど
そんなもんはブラウザのキャッシュからいくらでも回収出来るからなぁ

151 名前:nobodyさん mailto:sage [2008/05/01(木) 01:13:00 ID:???]
foreach で読み込むときに異なる行を複数取得教えてください
foreachの前で下記のようにやってみたらエラーになります
$str1 =~ /あいうえお/;
$str2 =~ /さしすせそ/;




152 名前:nobodyさん mailto:sage [2008/05/01(木) 01:16:22 ID:???]
日本語が良くわかんない(><)

153 名前:nobodyさん [2008/05/02(金) 11:14:09 ID:Sh68NuTD]
2chの日付の後に付くIDはどうやって算出しているのですか?
よろしくお願いします。

154 名前:nobodyさん mailto:sage [2008/05/02(金) 23:30:24 ID:???]
pc11.2ch.net/php/#9のように?とは&使わずに引数使うのどうするの?

155 名前:nobodyさん mailto:sage [2008/05/03(土) 00:23:50 ID:???]
>>154
mod_rewriteとか。

実をゆうと localhost/file.cgi/aaa=bbb
とかで、/の後ろを引数として渡したり出来るんだけど、
色々と混乱しそうだから、俺は使わない。

156 名前:nobodyさん mailto:sage [2008/05/04(日) 16:40:15 ID:???]
どうやったら、変数に何も値が入ってないってことを確かめられるの?

157 名前:nobodyさん mailto:sage [2008/05/04(日) 18:06:42 ID:???]
$hensu or print "ナイヨ(><)\n";

158 名前:nobodyさん mailto:sage [2008/05/04(日) 18:19:28 ID:???]
$hensu = 0;
で破綻するので>>157はデタラメ。

defined($hensu) or print "ナイヨ(><)\n";
が正解。

159 名前:nobodyさん mailto:sage [2008/05/04(日) 19:26:18 ID:???]
>>156にとっての「何も値が入ってない」によって答えが変わるでしょ。

my $var = ''; # これが「長さ0の文字列が入ってる」のか「何も入ってない」のか
print "どっちが正解かわかんないんです(><)\n" if $var xor defined($var);

160 名前:nobodyさん mailto:sage [2008/05/04(日) 22:15:41 ID:???]
三値論理

161 名前:nobodyさん mailto:sage [2008/05/05(月) 18:10:43 ID:???]
use Socketと書かなくても、gethostbyname関数が使えるのはなぜ?
ドメインを入力してIPアドレスを出力するだけの、単純なスクリプトを作りたいので



162 名前:nobodyさん mailto:sage [2008/05/07(水) 13:21:17 ID:???]
記事の中の
 a href=" URL "
もしくは
 img src=" URL "
のURLが相対パスになっていた時に絶対パスに変換されるようにするには
どうしたらいいですか?

163 名前:nobodyさん mailto:sage [2008/05/07(水) 19:46:59 ID:???]
HTMLタグに「絶対パス」を入れても表示出来ないよ

164 名前:nobodyさん [2008/05/07(水) 21:26:07 ID:fDlQQ0EM]
いまapache?でcgiのテストをしてるんですが。
長居のでソースは遠慮するんですが、そのcgiを指定するとPLファイルをブラウザで表示したみたいに自分の打ったテキストがそのまま出てしまうのですが、このとき考えられるミスを教えて下さい。

165 名前:nobodyさん mailto:sage [2008/05/07(水) 22:20:31 ID:???]
>>161
use strict; use warnings;
#use Fcntl qw(:flock); use Socket;

open(LOG, '>', 'test.tmp') or die $!;
flock(LOG, 2);
#flock(LOG, LOCK_EX);
print LOG scalar gethostbyaddr(pack('C4', 127, 0, 0, 1), 2), "\n";
#print LOG scalar gethostbyaddr(pack('C4', 127, 0, 0, 1), AF_INET), "\n";
close(LOG);

use Fcntl qw(:flock) や use Socket しなくても flock() も gethostbyaddr() もつかえる。ふしぎ!

>>162
よくわかんないけど $ENV{'SERVER_NAME'} とか $ENV{'SCRIPT_NAME'} とか
ttp://search.cpan.org/~gaas/URI-1.36/URI.pm
ここの URI->new_abs() とかを眺めるといいんじゃないかと。

>>164
・自鯖板ネタなのにここに書いてる。
・よくわかんないまま共用レン鯖でテストしてる。
・ファイル名が なんたら.cgi だけど .htaccess で .cgi が text/plain になるよう仕込んである。
・ファイル名が なんたら.pl で実行属性がついてない。
・実は Perl と無関係な問題。
…1つぐらいは当たってると思います。

166 名前:nobodyさん mailto:sage [2008/05/07(水) 22:27:20 ID:???]
これじゃね?→Content-Type: text/html;

167 名前:nobodyさん [2008/05/07(水) 22:44:41 ID:fDlQQ0EM]
>>165
あ、すいません。自鯖板ネタなんだと思います。
そんな板があると知らなかったので・・・何回か色々とググったら、たぶんapacheの設定ミスみたいです。
見直してみます。
ご迷惑おかけしました。
>>166
そっちは試してみたので。スクリプト的にはたぶん問題ないです。
helloworldレベルの奴でも出なかったし、本丸写しでも無理でしたし。
ありがとうございました。

168 名前:nobodyさん mailto:sage [2008/05/08(木) 00:03:38 ID:???]
$HOGE = ABC
DEF123 を ABC123 に置き換えたい時は
$str =~ s/DEF123/$HOGE123/g;
では駄目ですよね? どうしたらいいですか?

169 名前:nobodyさん mailto:sage [2008/05/08(木) 00:16:04 ID:???]
$str =~ s/DEF123/${HOGE}123/g;

170 名前:nobodyさん mailto:sage [2008/05/08(木) 00:50:06 ID:???]
>>169
ありがとうございます。うう…

171 名前:nobodyさん mailto:sage [2008/05/08(木) 10:10:29 ID:???]
>>161
組み込み関数だから使える。



172 名前:161 mailto:sage [2008/05/08(木) 18:42:19 ID:???]
>>171
thx

173 名前:nobodyさん mailto:sage [2008/05/08(木) 20:29:16 ID:???]
ABC/DFG/HIJ/../  →  ABC/DFG/
こういうのが         こういう感じで置き換わるように

$str =~ s/\/[^\/]*\/\.\.\//\//g;
こうやってみたのですが

ABC/DFG/HIJ/../../  →  ABC/DFG/../
こういうのは         こうなっちゃいます

ABC/DFG/HIJ/../../  →  ABC/
こうなってくれるにはどうしたらいいですか?

174 名前:nobodyさん mailto:sage [2008/05/08(木) 20:46:01 ID:???]
../ を消すだけじゃ駄目?

$str =~ s{\.\./}{}g;

こんな風に。

175 名前:173 mailto:sage [2008/05/08(木) 20:59:09 ID:???]
>>174
../ が前方を巻き込んで消えるようにしたいのです
一行では無理でしょうか

176 名前:nobodyさん mailto:sage [2008/05/08(木) 21:06:50 ID:???]
ごめんなさい。
完全に勘違いしてました。

こういうこと?

$str =~ s{[^/]*/(\.\./)+}{}g;


177 名前:173 mailto:sage [2008/05/08(木) 21:22:58 ID:???]
>>176
すみませんお手数おかけして…
それだと
ABC/DFG/HIJ/../   の時も
ABC/DFG/HIJ/../../  の時も
ABC/DFG/  になってしまいます

ABC/DFG/HIJ/../../  の時には
ABC/   になるようにしたいのです

178 名前:nobodyさん mailto:sage [2008/05/08(木) 21:29:39 ID:???]
正規表現でどうにかする方向は>>176さんに任せつつ。

>>173
use File::Spec;
print File::Spec->canonpath('ABC/DFG/HIJ/../../'); # ABC

末尾のデリミタが消えたりしますが。

179 名前:176 mailto:sage [2008/05/08(木) 21:40:41 ID:???]
質問の趣旨がようやくわかった。ファイルパスの操作か。
こんなことしてどうするんだろうとか不思議に思ってた。
なんか寝ぼけてるな。
これを正規表現でどうにかしたのをみてみたい。

180 名前:173 mailto:sage [2008/05/08(木) 22:04:20 ID:???]
わ、最初からファイルパスと言うべきでした。すみません。
RSS出力のCGIをいじってて、文章中にあるリンクやimgタグがRSSフィードでは
絶対パスでないと働かないので、相対パスになってた時に絶対パスに置き換わるように
したかったのです。

$RSS_BASE_URI = "$ENV{'HTTP_HOST'}$ENV{'SCRIPT_NAME'}";
$RSS_BASE_URI2 = &GetDir($RSS_BASE_URI);

元のCGIにこれがあるので、

$str =~ s/href=\"/href=\"$RSS_BASE_URI2/g;
$str =~ s/src=\"/src=\"$RSS_BASE_URI2/g;
$str =~ s/http\:\/\/.*?\/http\:\/\//http\:\/\//g;
$str =~ s/\/\.\//\//g;
$str =~ s/\/[^\/]*\/\.\.\//\//g;

こうやってみたんですが…(見にくくてすみません)
こういう書き方をするようなものではないのでしょうか?

>>178
すみません、記事の中からURLを抜き出して当てはめるにはどうすれば…

181 名前:178 mailto:sage [2008/05/08(木) 22:46:06 ID:???]
my $str = 'ABC/DFG/HIJ/../.././././';
while (index($str, './') + 1) {
 $str =~ s!/\./!/!g;
 $str =~ s!/[^/]*/\.\./!/!g;
}
print $str;

ループなしでどうやるんだろう。

>>180
最初から「>>162です」と言って欲しかった気がする165です。
$RSS_BASE_URI2 の正体等々よくわかんないので、下記を見ながらごにょごにょしてください。

use URI;
print URI->new_abs('../../images/spacer.gif', 'example.com/cgi-bin/test/');
# example.com/images/spacer.gif



182 名前:nobodyさん mailto:sage [2008/05/08(木) 22:46:10 ID:???]
>>180
横レス。
モジュールがあるか?と静観してたんだが、こっちに移動してきたのかw
my $RSS_BASE = '/ABC/DFG/HIJ/' ; # 絶対パス
my $path = '../../abc/efg/' ; # 相対パス
my $cnt = $path =~ s{\.\./}{}g ; # ../ の数把握と同時に消去。
$RSS_BASE =~ s/([^\/]*?\/){$cnt}$// ; # 絶対パスから../の回数分のディレクトリを削る。
print $RSS_BASE . $path . "\n" ; # プリント。

183 名前:nobodyさん mailto:sage [2008/05/08(木) 22:47:32 ID:???]
ああ、やっぱモジュールがあったのねorz...
おまけにタワゴト書いてるし。


184 名前:173 mailto:sage [2008/05/08(木) 23:36:51 ID:???]
>>181
ごめんなさい。>>162です。
記事の中から該当部分を抜き出してまた戻す方法も分からない絶望的分からなさだったので
教えていただいたものを使うことができず、恥ずかし悲しくなりながら単純な置換だけでなんとか
やれないかと別の方向にごにょごにょしちゃってました。
もう少し勉強してそれを使えるようにがんばってみます。ありがとうございました。

>>182
移動してきてました…。
自分が知らないだけでこれもきっと一行ですむのだろうと思ってたら、そうでもないようですね。
勉強してなんとか単純置換以外も使えるようになろうと思います。ありがとうございました。

185 名前:nobodyさん mailto:sage [2008/05/09(金) 04:31:31 ID:???]
モジュール使えで終了な話ではあるけどワンライナーでかけないのが悔しいorz


186 名前:nobodyさん mailto:sage [2008/05/09(金) 07:34:10 ID:???]
せいぜい短くしても
$str="ABC/DFG/HIJ/../../././abc/efg" ;
1 while $str =~ s{([^/]*?/\.\./|\./)}{} ;
print $str . "\n" ;
程度だね。



187 名前:nobodyさん [2008/05/10(土) 18:46:41 ID:jhS0+1hl]
テストしても何も表示されないんですが何がおかしいのでしょう?
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>あ</title></head>\n";
print "<body>$kao<br>$body<br>$asi</body>\n";
print "</html>";
タイトルすら出てくれないんです。
たぶん初歩的なミスだと思うのですが・・・


188 名前:nobodyさん mailto:sage [2008/05/10(土) 19:17:45 ID:???]
ヘッダは?

189 名前:nobodyさん [2008/05/10(土) 20:49:00 ID:jhS0+1hl]
print "Content-type: text/html\n\n";
これですか?


190 名前:173 mailto:sage [2008/05/10(土) 21:11:01 ID:???]
>>186
あ、一行でもできたんですね!
ありがとうございます、動きました!

URLを抽出してモジュールに渡すのに悪戦苦闘してましたが、
このままできないのもくやしいのでそっちもがんばってきます。

191 名前:nobodyさん mailto:sage [2008/05/10(土) 23:31:35 ID:???]
>>189
その行を print "<!DOCTYPE〜 の行の前に書いてる?
あとエラーじゃなくて真っ白? ソースも?



192 名前:nobodyさん [2008/05/11(日) 12:00:02 ID:/WAyhnOg]
>>191
はい。この行を書いて、一行改行してhtmlソースです。
ANHTTPDで真っ白でした。
前に$kaoとかを定義づけてるんですけども(ifで)それのミスなら500が出るかな、と思ったので。


193 名前:181 mailto:sage [2008/05/11(日) 17:10:05 ID:???]
>>190
「くやしいのでモジュール使うやりかたでもがんばってみる」方のようなので
ごにょごにょするときの参考にしてみてください。

use URI; # URIモジュールさん召喚。
my $RSS_BASE_URI2 = 'example.com/my/rss/generator/'; # 例。
my $str = join('', <DATA>); # __DATA__ 以下の割箸をまとめて $str に袋詰めします。

# >>180に基づいてみました。
$str =~ s/href="([^"]+?)"/'href="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg;
$str =~ s/src="([^"]+?)"/'src="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg;

print $str, "\n";
# 出力:
# <img src="example.com/diary/img/test.jpg">
# <a href="example.com/diary/latest">latest</a>
# <a href="example.com/test/script.cgi">Test Script</a>

__DATA__
<img src="../../../diary/././img/././test.jpg">
<a href="../../../diary/latest">latest</a>
<a href="example.com/test/script.cgi">Test Script</a>

194 名前:193 mailto:sage [2008/05/11(日) 17:25:08 ID:???]
事故レスれす。

> $str =~ s/href="([^"]+?)"/'href="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg;
> $str =~ s/src="([^"]+?)"/'src="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg;

$str =~ s/(href="|src=")([^"]+?)"/$1. URI->new_abs($2, $RSS_BASE_URI2) .'"'/eg;

195 名前:nobodyさん mailto:sage [2008/05/11(日) 20:48:25 ID:???]
>>192
ANHTTPDの設定だと思うけどなー。
「ANHTTPD 真っ白」でぐぐったらなんか色々出てきたから
やってみたら

196 名前:nobodyさん mailto:sage [2008/05/12(月) 04:25:47 ID:???]
ブラウザを使わずにBookOFなどの商用サイトに接続して本を検索したり注文したりする
Perlで可能でしょうか?
可能でしたら具体的に教えていただけないでしょうか


197 名前:nobodyさん mailto:sage [2008/05/13(火) 03:27:45 ID:???]
そのサイトが検索用にAPIでも提供していれば
コマンドラインからの実行で検索は出来るはず(Amazon等)
注文までは知らね


198 名前:nobodyさん mailto:sage [2008/05/13(火) 05:33:31 ID:???]
>>196,>>197
別にAPIとか対応して無くても、Formで受け付けてくれるなら(JavascriptやFlashでなければ)
気合さえあれば、検索も注文も出来る。

199 名前:190 mailto:sage [2008/05/13(火) 07:31:33 ID:???]
>>193
ありがとうございます、参考に……って回答だった!
自分のとこでも動きました。こんなに簡潔になるなんて感激です。
~ s/ 以下にも入れられたんですね…
一回やってエラーが出たので(多分何か抜けてた)
別の場所で動かしたそれを元に戻す過程がいるのかと
甚だしい勘違いをしてました。

何一つ自分で解決できなかったけどなぜか大きく成長したような気がしました
本当にありがとうございます。
CGIでやってみたいことはまだまだあるので次はgoogle的なもので
解決できるようになりたいものです。

200 名前:nobodyさん mailto:sage [2008/05/14(水) 02:23:53 ID:???]
>>198
まあ、やって出来ない事は無いとは思うけど
気合いってよりは無駄な作業が多くなるでしょ
検索して返ってくるのはHTMLな訳だからそこから必要な物を切り出して
さらにフォームを探して送信する内容を整えて・・・


201 名前:nobodyさん mailto:sage [2008/05/14(水) 04:27:20 ID:???]
>>200
そう、だから気合がいる。昔そんなのを書いてて、
「こんなん苦労して書く必要あんのかよ?しかも1サイトにしか通用しねえし・・」
とか思ったこともあるけど、気合(笑)でカバーした。あの頃は若かった。



202 名前:196 mailto:sage [2008/05/14(水) 04:44:38 ID:???]
みなさん情報ありがとうございます
ブラウザ無しでできるって事ですね
ブラウザ無しでデータをやり取りすると速いんじゃないかと思うのですが
実際どうでしょうか?
込み合ってるサイトもスイスイですか?

203 名前:nobodyさん mailto:sage [2008/05/14(水) 05:50:58 ID:???]
>>202
それは、相手のサーバーの処理能力とか、回線状態による。
まあそのページが、Javascriptやら画像やらフレームやらで大変込み入った内容なら
ブラウザでレンダリングするよりかは早くなるかも知れん。
(向こうのレスポンスについては、こっちからじゃなんもでけん)
けど、HTMLを正規表現等でパースして、ifで場合分けして、Formに内容セットしてとかしてたら、
はっきり言ってブラウザでクリックしたりしてするのの楽さと比べて、そんな恩恵あるとは思えん。
なにより、そうゆうコード書くのにかなり気合を要する(w)。

まあやるのは自由だけど・・・。
DDosアタックでも仕掛けるのなら話は別だが・・。

204 名前:nobodyさん mailto:sage [2008/05/14(水) 06:19:24 ID:???]
スイスイ具合は「画像オフ・JSオフ・CSSオフ」のブラウザと大差ないよ。レンダリングの有無だけ。
「Perlで書けばスイスイ!」だけを期待してるんだったら、やめれと。
でも、HTMLをパースしてCookieも食べて、フォーム仕立てて送信、お返事をパース…の繰り返しを書いて
意地でもPerlで注文してやる、というマゾな考えならそれはそれでありなのかもね。

205 名前:nobodyさん mailto:sage [2008/05/16(金) 00:52:53 ID:???]
近所の古本屋さんでオライリーPerl リソースキット UNIX版Xと記載されたperlの解説本を発見!
定価15000円らしいのだが2000円の値札が付いている
CD付属でそのCDは未開封
パラパラッと立ち読みしたらWindows環境にも通用しそうな気がするんですよ
自分はWindows環境なんだけどこの本は勉強なりそうですか?
付録のCDはWindows環境でも使えそうですか?
ご存知の方お願いします


206 名前:nobodyさん mailto:sage [2008/05/16(金) 12:23:26 ID:???]
>>205
それ、解説書じゃなくて、CPANにある
モジュールのドキュメントを和訳しただけのものだから。
しかも10年前のものだから。
www.oreilly.co.jp/out/presuni/



207 名前:nobodyさん mailto:sage [2008/05/16(金) 16:32:25 ID:???]
>>206さん
ありがとうです
UNIXと記載がありますが2000円捨てるつもりで買ってみようかと思います
他にも古い本でプログラミングperlUNIXとか600円で売っていたんですよ
Windowsで動くのか心配だけど一緒に買ってみます

208 名前:nobodyさん mailto:sage [2008/05/16(金) 16:37:16 ID:???]
XPのためにWin98の本買うようなもの
最新のドキュメントを探したほうがいい
古いの見ても混乱するだけ

209 名前:nobodyさん mailto:sage [2008/05/16(金) 16:45:50 ID:???]
>>208さん
そうだなー
そう言われればその通りですよね
やっぱり見合わせます
ありがとうございます

210 名前:nobodyさん mailto:sage [2008/05/16(金) 17:18:48 ID:???]
Perlほど解説本なしでネットでまかなえるプログラミング言語はないだろう

211 名前:nobodyさん mailto:sage [2008/05/19(月) 01:43:18 ID:???]
コマンドプロンプトからユーザエージェントして返ってきた文字列が
英数字以外は文字化けしてます
コマンドプロンプト内で読めるように教えてください
jcode.plもエラーになります



212 名前:nobodyさん mailto:sage [2008/05/19(月) 01:52:01 ID:???]
>>211
意味がわかりません。
> コマンドプロンプトからユーザエージェントして
とはどうゆうことですか?

213 名前:nobodyさん mailto:sage [2008/05/19(月) 02:16:27 ID:???]
わかんないならスルーしろよ
なんで答えるの?
教えたらわかりそうなのか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<136KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef