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


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

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



1 名前:nobodyさん mailto:sage [2011/09/09(金) 18:11:49.71 ID:???]
Perlのコーディングで困ってる人のスレです。

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

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

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

お勧めサイトは >>2 以降

前スレ hibari.2ch.net/test/read.cgi/php/1295170172/

142 名前:nobodyさん mailto:sage [2011/09/29(木) 02:22:14.02 ID:???]
ファイルの最後の行から上の行に向かって1行ずつ取り出せるの?
ファイル読み込み位置操作できるのseekしか見つからなかったが
これ行単位じゃなく後ろからのバイト数なんだよな

143 名前:nobodyさん mailto:sage [2011/09/29(木) 02:39:16.38 ID:???]
ゆとりか。作れよ。

144 名前:nobodyさん mailto:sage [2011/09/29(木) 04:40:11.37 ID:???]
>>142
www.din.or.jp/~ohzaki/perl.htm#File_Reverse

145 名前:nobodyさん mailto:sage [2011/09/29(木) 06:43:00.87 ID:???]
>>137
一応書いとくが、Benchmarkのサブルーチン実行は記載順じゃないぞ。
勝手にソートされる。
もちろん、135の意見に同意するわけでは無いが。

ahoが遅いのは、明白に(<$fh>)の時点でメモリに確保(無名配列への代入と同等)
されてて、その後に@arrにpushしてるから、遅いの当たり前。
サブルーチンの名前が「アホ」な時点でネタだと分る。


146 名前:nobodyさん mailto:sage [2011/09/29(木) 07:40:54.50 ID:???]
AWKのAの人ディスってんの……

147 名前:nobodyさん mailto:sage [2011/09/29(木) 08:22:35.67 ID:???]
>>130
以下は自分の推測。
正しいかはわからない。

@arr = <$fh>;は、まずreadline関数内で、全行のリストが作られ、それが@arrにコピー
されるので「@arr+全行リスト」のメモリを使う。

while (<$fh>){ push @arr, $_ }は、1行だけが$_に入るので、「@arr+1行分」のメモリ
しか使っていない。

メモリ使用量の差が速度差に出たと。

148 名前:nobodyさん mailto:sage [2011/09/29(木) 11:31:16.87 ID:???]
>>130
7.8MB のテキストファイルでぶん回してみた

Benchmark: timing 10000 iterations of aho, arr, whi...
aho: 1337 wallclock secs (1157.39 usr + 103.11 sys = 1260.50 CPU) @ 7.93/s (n=10000)
arr: 1284 wallclock secs (1118.88 usr + 102.05 sys = 1220.92 CPU) @ 8.19/s (n=10000)
whi: 921 wallclock secs (768.06 usr + 104.30 sys = 872.36 CPU) @ 11.46/s (n=10000)
Rate aho arr whi
aho 7.93/s -- -3% -31%
arr 8.19/s 3% -- -29%
whi 11.5/s 44% 40% --


149 名前:nobodyさん [2011/09/29(木) 16:22:24.12 ID:zOJkGfGB]
sendmailとperlで質問です。
メールからプログラムを起動したくて色々設定を行っているのですが
どうにも行き詰ってしまいました。

CentOSにwebminを入れて管理しています。
sendmailにエイリアスを利用してプログラムを起動しようとしているのですがうまくいきません。

とりあえず外部からのメールは受信出来ている状態です。
登録用のエイリアスにプログラムに送ると合わせてユーザーにもメール配信していますが
そちらには届いている事を確認済みです。
smrshについてはリンクを設定済みでエラーは返ってこなくなりました。

この状態で簡単なプログラムを作成して動作確認を行おうとしたのですが
プログラムが動きません。

#!/usr/bin/perl --

open(OUT, ">> datafile.txt");
print(OUT "動作確認\n");
close(OUT);

試しでこのようなコードを置いてるのですが動きません。
プロンプトから動作させた場合は正しくファイルに書き込まれています。

エイリアスの指定の仕方がまずいとかでしょうか?

エイリアス名: "|/usr/bin/perl /var/www/html/プログラム名"
のような感じで指定しています。
直接
エイリアス名: "|/var/www/html/プログラム名"
としてもダメでした。
もしわかるかたがいらっしゃいましたらよろしくお願いします。

150 名前:149 [2011/09/29(木) 16:24:24.50 ID:zOJkGfGB]
追記
パーミッションは
プログラム755
書き込み用ファイル666
としています。



151 名前:nobodyさん mailto:sage [2011/09/29(木) 16:36:26.36 ID:???]
まずすべきことは、エラーログを見てみる。

152 名前:nobodyさん mailto:sage [2011/09/29(木) 16:41:31.46 ID:???]
>>149
メールがサーバに届いているなら、/var/log/maillogかなんかに出ているログを確認するというのが基本です。
気になったのは、ファイルパス。シェル上ではログイン時にそのユーザー派のホームディレクトリにカレントパスがセット
されますが、sendmailで受けた場合はそのパスにならないのだから、絶対パスで指定する必要があります。

153 名前:nobodyさん mailto:sage [2011/09/29(木) 16:41:44.87 ID:???]
> open(OUT, ">> datafile.txt");
この datafile.txt はどのディレクトリに書き込まれるの?
パーミッションエラーで書き出せないとかじゃないの?

154 名前:149 mailto:sage [2011/09/29(木) 16:59:53.15 ID:???]
>>152,153
盲点でした絶対パスで書いたら問題無く書き込めてました。
ありがとうございました!

155 名前:nobodyさん mailto:sage [2011/09/29(木) 17:44:48.07 ID:???]
結局Perlは関係なかったね。

156 名前:nobodyさん mailto:sage [2011/09/29(木) 17:51:14.58 ID:???]
せやろか?

157 名前:nobodyさん mailto:sage [2011/09/29(木) 21:10:32.23 ID:???]
せのつくあれをやるなんていやらしい

158 名前:nobodyさん mailto:sage [2011/09/29(木) 21:45:52.72 ID:???]
最近じゃ、小学生どうしでもするんですってね、






せいくらべ。

159 名前:nobodyさん mailto:sage [2011/09/30(金) 03:01:50.06 ID:???]
投稿の表示の上にページ数を載せたい場合
最大ページ数=投稿数/1ページあたりの表示数の少数切り上げだから
投稿数がわからないと最大ページ数がわからないわけだから
whileだと最初にwile(<IN>){$toukousuu++;}で投稿数出してそのあとwile(<IN>){表示}の
2回ループしなきゃならないけど@lines一括読み込みなら$toukousuu=@linesのforeach(@lines){表示}の1回ループですむ

160 名前:nobodyさん mailto:sage [2011/09/30(金) 03:40:56.53 ID:???]

   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |       >>159
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /




161 名前:nobodyさん mailto:sage [2011/09/30(金) 09:23:13.25 ID:???]
hibari.2ch.net/test/read.cgi/affiliate/1317192380/
akiyan降臨中w

162 名前:nobodyさん mailto:sage [2011/09/30(金) 12:34:30.65 ID:???]
>>160
何で釣り扱いされているのかわからんw
じゃあ例えばファイルの下から10番目までの行であるならばフラグを立てるという場合
while(<IN>){

$aaa = $toukousuu-10;

if($count>=$aaa){
$flg = 1;
}
else{
$flg = 0;
}
$count++;
}
としなければならないが$toukousuuを求めるのはこれよりまえにwhile(<IN>){$toukousuu++;}とする必要が
あるのはわかるだろ。
つまりwhileだとループを2回しなければならんのだよ

163 名前:nobodyさん mailto:sage [2011/09/30(金) 13:19:30.58 ID:???]
             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
   >( c´_ゝ`)  |
            |
>( c´_ゝ`)     J
     >( c´_ゝ`)



             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
             |     >( c´,_ゝ`)
             |
             J   >( c´,_ゝ`)
                    >( c´,_ゝ`)

164 名前:nobodyさん mailto:sage [2011/09/30(金) 18:04:53.60 ID:???]
>>162
うん。そうだね。それで?それがどうかしたの?

って感じ。

165 名前:nobodyさん mailto:sage [2011/09/30(金) 18:27:33.76 ID:???]
>>164
だって2回ループするとその分重くなるじゃん

166 名前:nobodyさん mailto:sage [2011/09/30(金) 18:55:57.64 ID:???]
>>165
どのみち全数読み込まなきゃいけないんだったらもちろん一括読み込みすればいいんだけどさ。
しかし重くなるのが嫌だったら投稿数などのインデックス情報の類は別途保存して、
独立して管理するという方法もあるぞ。
そうすれば $count = @array; みたいにいちいち配列の要素数を数えなくても済む。

167 名前:nobodyさん mailto:sage [2011/09/30(金) 19:33:37.65 ID:???]
>>165
slurp の方が早いよって主張ならまだしも、、、
>>130の結果が理解出来てないだろお前さん。
% perl -le '$s = q{x} x 1000000 ; $s =~ s/(.{1,50})/$1\n/g; print $s ' > test.txt
% cat hoge.pl
use Benchmark qw( timethese cmpthese ) ;
cmpthese timethese ( undef, {
arr => sub { open my $fh, q{<}, q{test.txt} ; my @arr = <$fh> ; close $fh ; printf STDERR "%d\n", scalar @arr ; for ( @arr ){ print STDERR; } },
whi => sub { open my $fh, q{<}, q{test.txt} ; my @arr ; while (<$fh>){ push @arr, $_ } ; close $fh ; printf STDERR "%d\n", $. ; for ( @arr ){ print STDERR; } },
});
% perl hoge.pl 2> /dev/null
Benchmark: running arr, whi for at least 3 CPU seconds...
arr: 4 wallclock secs ( 2.00 usr + 1.23 sys = 3.23 CPU) @ 242.11/s (n=782)
whi: 4 wallclock secs ( 1.95 usr + 1.29 sys = 3.24 CPU) @ 254.94/s (n=826)
Rate arr whi
arr 242/s -- -5%
whi 255/s 5% --


168 名前:nobodyさん mailto:sage [2011/09/30(金) 20:14:25.09 ID:???]
>>166
全部読み込むにしても一括読み込みだとメモリ食うよ
一行ずつ回す方がいい

>>167
読んだけど意味が分からない

169 名前:nobodyさん mailto:sage [2011/09/30(金) 20:49:46.04 ID:???]
165の「重い」ってメモリの重さの話か?
速度の話だと誤読したわ。

速度だと既に結論が出てて、>>130理解してれば、
while(<$fh>){ push @arr, $_ ; } が、@arr=<$fh>;
より早いんだから、後の処理が同じなら何回ループ回そうが、
無関係。カウンタを自分で付けようが、 $. 利用しようが同じ。

メモリ?
んなもん、同じファイルなら、
@arr =<$fh> ;だろうが、一行づつ回そうが誤差範囲だろ。
それを何回回そうが無関係。
@arr = do{ local $/ ; $buf = <$fh> ; split /^/ms, $buf ;
なんかするんだったら多くかかるのは当然だけど。

sub myps { print `ps ux $$`};
myps;
# お好きなコード
myps;
でもして差分取れば?

170 名前:nobodyさん mailto:sage [2011/09/30(金) 20:50:40.41 ID:???]
×@arr = do{ local $/ ; $buf = <$fh> ; split /^/ms, $buf ;
◯@arr = do{ local $/ ; $buf = <$fh> ; split /^/ms, $buf ; } ;




171 名前:nobodyさん mailto:sage [2011/09/30(金) 21:29:34.48 ID:???]
釣りにマジレス
>>159
open my $fh, '<', 'hoge.pl' ;
while ( <$fh> ){ }
print "$.\n" ;
while ( <$fh> ){ print }
close $fh ;
このコードを hoge.pl として保存して実行してみろ。

と言うことで、
>>167
165 の言う「2回ループ」は上のコード、好意的に判断しても
「ファイルハンドル開き直してのファイル読み込み2回」って意味だ。
あなたの突っ込みは通じない。

172 名前:nobodyさん mailto:sage [2011/09/30(金) 23:04:33.02 ID:???]
あれ?まだやってるの?

ほんとうの意味でファイルを一括で読むこっちが
一番速いって答えは出たと思うんだけど。
all => sub { open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')); close $fh ; return split("\n", $buf);},



173 名前:nobodyさん mailto:sage [2011/09/30(金) 23:07:07.88 ID:???]
foreach ( split/\n/, $buf ) {}
はい

174 名前:nobodyさん mailto:sage [2011/09/30(金) 23:11:26.42 ID:???]
もうその話しじゃなくなってんだが、まあ突っ込んでやる。
同等の条件にすると話しにならんくらいarrの方が早い。
cmpthese timethese ( undef, {
arr => sub { open my $fh, q{<}, q{test.txt} ; <$fh> },
all => sub { open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')) ; split(/^/ms, $buf);},
});
結果↓
Benchmark: running all, arr for at least 3 CPU seconds...
all: 3 wallclock secs ( 2.72 usr + 0.36 sys = 3.08 CPU) @ 1366.56/s (n=4209)
arr: 4 wallclock secs ( 1.51 usr + 1.66 sys = 3.17 CPU) @ 30816.72/s (n=97689)
Rate all arr
all 1367/s -- -96%
arr 30817/s 2155% --



175 名前:nobodyさん mailto:sage [2011/09/30(金) 23:13:06.26 ID:???]
174はまちがい
スカラーコンテキストで評価されるわw


176 名前:nobodyさん mailto:sage [2011/09/30(金) 23:21:35.32 ID:???]
まちがい。arrは遅かったw

177 名前:nobodyさん mailto:sage [2011/09/30(金) 23:22:41.29 ID:???]
@arr =<$fh>がファイル一括読み込みよりも
遅いのは当たり前の話で、内部的に一行づつ読み込んでいるから。

178 名前:nobodyさん mailto:sage [2011/09/30(金) 23:23:54.55 ID:???]
同等の条件
arr => sub { my @arr = sub{ open my $fh, q{<}, q{test.txt} ; <$fh> }->() },
all => sub { my @arr = sub{ open my $fh, '<', 'test.txt'; my $buf; read($fh, $buf, (-s 'test.txt')) ; split(/^/ms, $buf); }->() },
まあ、 all の方が早いわな。

179 名前:nobodyさん mailto:sage [2011/09/30(金) 23:56:34.45 ID:???]
                    亠ァ厂|        `':,;..:..:.';.     ;'..:..:.,:'
                       ‐个 兀          `:;:.::.':.,   ,':.::.:,:'
`.:`.:''''..:.‐ :.:-:.:...,,,, __   、‐-、        __   ,.‐z_,-、   '':;;:::':, ,...;'::..:,;'  ,,.:':
..:..:...:..:..:...:...:...:.:..:...:...:..:.`_,,ノ └¬、'''.:.:‐:..,,ヾ、__)∠,ィク /,、   ';:''..:.:..:..:.:..:.'':;'':.:.,;.
.:..:...:..:..:...:...:...:.:..:...:...:..:.ヾ、_   <^'".:..:..:.:..: <`ヾ´~_  _~´ 〉'''':.::.;':.::...:.:..:..:..:...:.:.';' ,,
..:..:...:..:..:...:...: ,,;,;,;,,;:..:..:.:.:..: / /\ `ヽ、..:..:.:..:..:_ブ∧ ‐ ‐ /.:.:..:,;,::';..:..:..:.:..:..:..:...:.:.:''´:.:
:..:.:..:..,.:-〜' , 、m_)°.:.:.'ー-'..:..:..:`ー--',,;,;::.:.:ヽ、_i (_,/しヘヘ_) ´  '::;.:.::.:..:..:..:..:.:..,;'` ''
,;,,;,;/  <て_;:、。.:° ‐ '''' " ´ ´               ,;:''.:.:,:'' :;,._.:,;.,、:.'':.,,_
  / r'7ァッーヘ、_) ゚                      ,,:''.:.:,:'' , -〜''ヽ‐-‐、.:.:.''
-く  レ'/〈 °   。     ,ヘVフヽ、          ,,:''.:.:.:,:''  (_,ヘ、     ⌒
  V巛〈 ヽ  , 〜''ヽ    / e ヽノ\ヘ.      ,,:.''..::.:,:'' 。     と_刀Tゥー
_/ ヾ ヽ、 Y ァ个〜'。゚  ,少ー- 代ヽ、 ヾゝ   ,,.: '':.:/ヽ、' 。 ゚ (⌒⌒ー-く ノノ,!j
 {.   \ Y巛〈       ) lfgレ゙く  \''.:.::.:.:.:/ / 入 ゚ 。 `〜<ヾヾ、,`⌒ 〜
_, ヘ、  ヾ{ ヾト、      'ヾゝャgメl`   ヾヨ /〃/ _,,>    〉〉ノ `厂丁`
   \  \  ヽ、    `ゞへmfi_  ゞdf‐ '' ´      ////  ノ
─〜 ⌒ヽ、  \   ヽ、    ´`'‐ニ世三r<k´       _,,ノ,〆   /
    __,, へ、 \   ` ー- 、__      _,, --‐‐ ''´     _ - ´  /
 ̄ ̄      \  ` ー- 、 _     ̄ ̄ ̄       _, -〜< -一 ブ
          ヽ、、       ̄` ー─----── ´ ̄    _ -一 ´

180 名前:nobodyさん mailto:sage [2011/10/01(土) 01:21:20.72 ID:???]
>>179
話の流れを追う気はまったくないが
このAAはおめでたさ満点でよかった



181 名前:nobodyさん mailto:sage [2011/10/01(土) 20:11:38.10 ID:???]
画像を送信するときなんかはフォームと画像のデータが1つになった
変数で送られるからwileで1行ずつ回すというのは無理だな
こういう場合は画像が大きければ大きいほど、どうしてもメモリは食う

182 名前:nobodyさん mailto:sage [2011/10/04(火) 02:02:20.47 ID:???]
>>182
まあそうだろうなmalti-partの場合も
read(STDIN,$buff,$ENV{'CONTENT_LENGTH'});
で$buffに全部の送信データが格納されるから
画像が大きいほどメモリは食う

183 名前:nobodyさん mailto:sage [2011/10/04(火) 04:12:16.99 ID:???]
>>182
再帰アンカー/ひとり循環リスト乙

184 名前:nobodyさん mailto:sage [2011/10/06(木) 12:31:19.56 ID:???]
すいません
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
print $data;
だけのスクリプトを書いたんですが
Use of uninitialized value in read at 〜と出ます
これなんでですかね?

185 名前:nobodyさん mailto:sage [2011/10/06(木) 12:50:34.41 ID:???]
>>184
perldoc.jp/docs/perl/5.10.0/perldiag.pod

本当にその2行だけなのなら、
-w オプションが効いている下で $ENV{'CONTENT_LENGTH'} を未定義のまま実行したからだろう。

186 名前:nobodyさん mailto:sage [2011/10/06(木) 13:13:47.41 ID:???]
>>185
ありがとうございます。他のところがおかしいんじゃなくてよかったです。
これは入力がなければ出るものなんですね。

187 名前:nobodyさん mailto:sage [2011/10/06(木) 14:16:31.01 ID:???]
>>186
> これは入力がなければ出るものなんですね。
違う。$ENV{'CONTENT_LENGTH'} が未定義 (undef) だから出ている。
STDIN からの入力が無くとも $ENV{'CONTENT_LENGTH'} に 0 が入っていれば出ない。

> Use of uninitialized value%s
> (W uninitialized) 未定義値を、あたかも既に定義されているかのように使用しました。
> これは、"" か 0 と解釈されますが、間違いの可能性があります。
> この警告を止めるには、変数に定義された値を代入してください。

188 名前:nobodyさん mailto:sage [2011/10/06(木) 15:00:33.35 ID:???]
>>184
この「だけのスクリプト」ってのは嘘だな。
CGIとしてだったらこの2行だけでは動かない。

189 名前:nobodyさん mailto:sage [2011/10/07(金) 00:00:35.18 ID:???]
SSI使わずにHTML上にCGI呼び出す方法って<script>タグ以外にありますか?

190 名前:nobodyさん mailto:sage [2011/10/07(金) 01:23:00.44 ID:???]
>>189
<script>タグ勘違いしてる。それはクライアント側での処理だから。
ttかHTML::Templateなどのテンプレートエンジンを考えてみたら。



191 名前:nobodyさん mailto:sage [2011/10/07(金) 03:51:57.20 ID:???]
>>189
img、iframe、cssのimport

192 名前:nobodyさん mailto:sage [2011/10/08(土) 14:37:18.51 ID:???]
https://github.com/motemen/WWW-BBS-2ch
の make test は Result: PASS になり、
SYNOPSIS にあるコードを動かしてみたところ、

Can't call method "add_handler" on an undefined value at /usr/lib/perl5/site_perl/5.10/WWW/BBS/2ch.pm line 39.

と出ました。なので 2ch.pm:39 を見ると、

https://github.com/motemen/WWW-BBS-2ch/blob/master/lib/WWW/BBS/2ch.pm
my $class = shift;
my $self = bless {
ua => LWP::UserAgent->new(agent => "Monazilla/1.00 WWW::BBS::2ch/$VERSION"),
encoding => 'shift_jis',
@_,
}, $class;

$self->ua->add_handler(

という感じです。

Dumper $self->ua; すると undef です。

エディタを開いて試しに自分で
$ua = LWP::UserAgent->new(agent => "Monazilla/1.00 WWW::BBS::2ch/$VERSION");
$ua->add_handler(
とか書くと $ua は取得できて add_handler も動くので CPAN モジュールは問題なく入っているようです。

my $self = bless {} が怪しいのですが、どうすれば WWW::BBS::2ch の SYNOPSIS を動かせるでしょうか。


193 名前:nobodyさん mailto:sage [2011/10/08(土) 17:51:50.13 ID:???]
>>192
$self->{ua} で許して

194 名前:nobodyさん mailto:sage [2011/10/08(土) 18:24:39.39 ID:???]
$self->ua;

sub ua{ }


は定義されてるの?

195 名前:nobodyさん mailto:sage [2011/10/08(土) 23:56:07.90 ID:???]
>>192
どうも https://github.com/motemen/WWW-BBS-2ch の例が間違っているみたい。
| my $bbs = WWW::BBS::2ch->new(cache => $cache, ua => $ua);
ここで $cache, $ua なんて存在しないから。
その通りに入力したら $self->ua は undef になるだろう。ためしに引数無しで
| my $bbs = WWW::BBS::2ch->new;
としたらどうだ。

196 名前:nobodyさん mailto:sage [2011/10/09(日) 16:35:15.15 ID:???]
いまどきCGI.pmって見かけたけど、フレームワーク使えって意味だろうか。
わざわざフレームワーク通すまでもないときはどうするのがモダンなの?


197 名前:nobodyさん mailto:sage [2011/10/09(日) 17:53:18.28 ID:???]
cgi-lib.berkeley.edu/ ん?いや、何でもない…

198 名前:192 mailto:sage [2011/10/09(日) 18:49:28.44 ID:???]
>>195
うわああ、ありがとうございます!
動きましたぁばばばば。

199 名前:nobodyさん [2011/10/11(火) 23:38:30.50 ID:Xx0lESYm]
間違えて「プログラム技術板」に質問を書いてしまいましたが
此方で改めて質問させて下さい。

その1------------
DBIからのSqlサーバへの接続方法をご教示下さい。
質問場所がここじゃなかったら誘導お願いします。

以下の環境を作成し、
コマンドプロンプトからtest.plをCALLしたのですが
SQLサーバがないとのエラーが表示され、接続出来ませんでした。
値を色々変えてみたりしたのですがどうやっても接続できず…
何が悪いのかお手上げ状態です。

接続文字列が悪いのでしょうか…?

ODBCでの接続は行えており、CSEからのDB参照や
コマンドプロンプトからのsqlcmdコマンドでなら正常にアクセスできます。
[sqlcmd /E /S PC-Name\SQLEXPRESS]

環境
・Windows7
・Microsoft SQL Server 2008
・Perl5.0


Server:PC-Name\SQLEXPRESS
DB:sampleDB
User:user
Password:pass



200 名前:nobodyさん [2011/10/11(火) 23:39:50.63 ID:Xx0lESYm]
-----------------------
test.pl
-----------------------
$dataSource = "dbi:ODBC:".
"driver={SQL Server};".
"Server=(local);database=sampleDB;".
"Trusted_Connection=yes;".
"AutoTranslate=No;";
#データベースに接続
$user="user"; #ユーザ名
$pwd="pass"; #パスワード
$dbh = DBI->connect($dataSource,$user,$pwd)
or die $DBI::errstr;
# データアクセス(今は処理無し)
$dbh->disconnect;
-----------------------
エラー内容
-----------------------
DBI connect('driver={SQL Server};Server=(local);database=sampleDB;Trusted_Connec
tion=yes;AutoTranslate=No;','user',...) failed: [Microsoft][ODBC SQL Server Driver
][Shared Memory]SQL Server が存在しないか、アクセスが拒否されました。 (SQL-08001
) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()). (S
QL-01000) at dbtst.pl line 28
[Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server が存在しないか、ア
クセスが拒否されました。 (SQL-08001) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()). (S
QL-01000) at dbtst.pl line 28.
-----------------------




201 名前:nobodyさん mailto:sage [2011/10/11(火) 23:40:28.76 ID:???]
馬鹿には見えないtest.plが張ってあるらしいな

202 名前:nobodyさん [2011/10/11(火) 23:48:58.55 ID:Xx0lESYm]
その3------------
「その2」を付け忘れてしまいましたが
199-200でワンセットです。

Linux + MySql5.0 + DBIで動作しているシステムを
改造する為のローカルサーバを作成したいので、
どうしてもDBIを使用したいと考えています。

よろしくお願いいたします。


203 名前:nobodyさん mailto:sage [2011/10/12(水) 01:55:18.70 ID:???]
> Server=(local);
この表記はアリなのか?


204 名前:nobodyさん mailto:sage [2011/10/12(水) 04:13:51.23 ID:???]
>>201
そうみたいだね。

205 名前:nobodyさん mailto:sage [2011/10/12(水) 08:22:59.76 ID:???]
よくわからないから外れてるかもしれないけど
sampleDBが文字列じゃなくて変数になってないか?

206 名前:nobodyさん mailto:sage [2011/10/12(水) 12:30:39.86 ID:???]
'' で囲ってみ

207 名前:199 [2011/10/12(水) 18:44:51.34 ID:QKPkC9MD]
アドバイス有難うございます。

>>203
Server=(local);
の表記は、ネット上で拾ったやり方をそのまま使っているので
使える…とは思うのですが…。ちなみに、
Server='PC-Name\SQLEXPRESS';
にしても状況変化なしです。

205 206>>
"database='sampleDB';"
に変更してみましたが、変化なしです。


エラーメッセージで
「SQL Server が存在しないか、アクセスが拒否されました」
とあるので、DBではなくServerへの接続が
失敗しているのではないかと思うのですが

Windows7の場合カーネルの違いから挙動が異なる
といった事はありませんでしょうか?


208 名前:nobodyさん mailto:sage [2011/10/12(水) 19:15:26.58 ID:???]
>>207
いっそのこと、ODBC データソース アドミニストレータ で定義してしまいば?

209 名前:199 [2011/10/12(水) 20:45:40.79 ID:QKPkC9MD]
>>208
有難うございます!

ODBC経由でDBに接続する事でアクセする事が出来ました(>_<。
ユーザDSNに「dbgSQLServer」の名前でDBを登録し、
$dataSource= "dbi:ODBC:dbgSQLServer";
としたら無事SQLの実行まで確認できました。

直接接続する事にこだわる必要は無かったんですね。
何日も悩んでいた事だったので本当に助かりました。

有難うございました。

210 名前:nobodyさん mailto:sage [2011/10/12(水) 22:01:53.09 ID:???]
>>209
よかったよかった!
Windows+PostgreSQLでDBD::Pgが使えなくて困ったときにそうしたんだ。
その時PgPPどころかCPANもわからなかったあのころ。
車輪何個も作っちゃったけど、キニシナイ



211 名前:199 mailto:sage [2011/10/13(木) 18:35:59.97 ID:???]
>>210
本当有難うございました。

PostgreSQLは使ってみようとインストールする時点で
挫折した記憶が…(^^;

プログラムををゴリゴリ書くのは楽しいんですが
何時も環境構築が一番のネックになります。

これでやっとコーディングに入れます♪

212 名前:nobodyさん mailto:sage [2011/10/17(月) 23:46:25.75 ID:???]
ファイルロックについて質問です。

自分は今は rename とか mkdir とか使ってロック機構を実装してますが、
お仕事とかで perl を使ってる人はファイルロックする際には rename とか
mkdir とかでロックかけてるのでしょうか?
それとも flock を使用しているねでしょうか?

「DB 使えや」 ってゆう回答は求めておらず、ファイル読み書き時に於けるロックは、
仕事などではどう対応されているのか気になったもので、質問させていただきました。


213 名前:nobodyさん mailto:sage [2011/10/18(火) 01:32:44.53 ID:???]
確かに「DB使えや」ではあるなw

以前、自分が入社する前に書かれたソースを見たことがあるんだけど、その時はflockを使ってたっぽい。
ただflockすれば良いというものでもなく、きちんとした方法で使わないと全くの無意味だけど。

あと、今ならその辺を上手くやってくれるモジュールがるような気がする。

214 名前:nobodyさん mailto:sage [2011/10/18(火) 06:58:20.05 ID:???]
flockは使えない場合があるので(具体的には自分で調べてくれ)
その場合はmkdirなり使うとかの、別の方法で対処すると思う。
プロとかアマとかはあんまし関係ないんじゃないだろうか。

215 名前:nobodyさん mailto:sage [2011/10/18(火) 12:47:22.63 ID:???]
今のご時世でもflockが使えないとかあるの?

216 名前:nobodyさん mailto:sage [2011/10/18(火) 16:58:19.77 ID:???]
ご時世関係ない

217 名前: 忍法帖【Lv=16,xxxPT】 mailto:sage [2011/10/18(火) 17:43:19.26 ID:???]
>>212
イントラでperl使ってるけど…
ごめん、DB(PostgreSQL)つかってる。
月並みだけど、
DB>flock>その他の手段
だよね。

218 名前:nobodyさん mailto:sage [2011/10/18(火) 17:48:49.73 ID:???]
横槍失礼。
デッドロックに対する対応だけど、
プロセスがkillされるような事態に備えて $SIG でトラップすべきか、
次実行されたときにデッドロックされたファイル情報から指定時間経過してればデッドロックと判断。
どっちがいいんでしょうね。
トラップした方がスムーズにいけるっぽいけど、他の部分で別のトラップがされると実行されない可能性もあったりするんだよね。
迷うわぁ・・・

219 名前:nobodyさん mailto:sage [2011/10/18(火) 22:08:36.70 ID:???]
デッドロックはバグだ。
デッドロックしないようにつくれや

220 名前:nobodyさん mailto:sage [2011/10/18(火) 22:33:11.15 ID:???]
DB使う。



221 名前:nobodyさん mailto:sage [2011/10/18(火) 22:58:12.17 ID:???]
>>219さんは$SIGを適切に設定してる感じですか?

222 名前:nobodyさん mailto:sage [2011/10/18(火) 23:25:30.92 ID:???]
$SIGなの? %SIGじゃないの?

223 名前:nobodyさん mailto:sage [2011/10/19(水) 00:20:24.38 ID:???]
$SIG{} って書いてから {} だけ消したので修正ミスです ^-^;

224 名前:nobodyさん [2011/10/19(水) 00:46:29.74 ID:LOxxA4S5]
GDで文字列を画像に変換するとき
widthを入力しないといけませんよね
全角文字だけなら計算できるのですが、半角英数カナなどが含まれるので余白が発生してしまいます。
あらかじめ文字列の長さをpixelで計算する方法はありませんか?

225 名前:nobodyさん mailto:sage [2011/10/19(水) 09:54:29.71 ID:???]
何も調べずに書くが
cp932に変換してバイト数を調べるのはどうか

226 名前:nobodyさん mailto:sage [2011/10/19(水) 10:42:15.21 ID:???]
>>224
@bounds = GD::Image->stringFT($fgcolor,$fontname,$ptsize,$angle,$x,$y,$string)

227 名前:nobodyさん mailto:sage [2011/10/19(水) 14:19:45.05 ID:???]
>>226
完璧です。ありがとうございました。

228 名前:nobodyさん mailto:sage [2011/10/21(金) 17:01:48.08 ID:???]
GD で機種依存文字を使えるようにするための方法はありますでしょうか

229 名前:nobodyさん mailto:sage [2011/10/22(土) 05:11:26.88 ID:???]
time_%2F_1319178123_%2F_name_%2F_%82r%82%81%81%99%82k%82%85%82%85_%2F_title_%2F_%82%BD%82%A2%82%C6%82%E9.txt

現在ファイルがopenできなくなると言う罠に陥りました。
windows7でこうゆうファイル名なんですが、コレ問題ありますか?
運用はunix系で考えているんでそっちでも問題あれば教えてください。

230 名前:nobodyさん mailto:sage [2011/10/22(土) 05:13:47.30 ID:???]
すみませんなんでもないですopenでしました。



231 名前:nobodyさん mailto:sage [2011/10/22(土) 09:48:47.25 ID:???]
>>230
「き」と「し」を打ち間違えるとは珍しい。

232 名前:nobodyさん mailto:sage [2011/10/22(土) 20:17:03.51 ID:???]
>>229をデコードしたヤシは挙手ノ

233 名前:nobodyさん mailto:sage [2011/10/22(土) 21:14:46.30 ID:???]
Sa☆Lee って何だ?

234 名前:nobodyさん mailto:sage [2011/10/22(土) 21:57:21.39 ID:???]
Sa☆Leeでぐぐったヤシは挙手ノ

235 名前:nobodyさん mailto:sage [2011/10/22(土) 22:19:39.38 ID:???]
なんかの罠かと思ってスルーしてた

236 名前:nobodyさん mailto:sage [2011/10/24(月) 13:03:32.39 ID:???]
ハッシュの中の配列に、値を追加したいときはどうすればできますか?

こうすると
push($h{$i}->[0], "aaa"));

このようなエラーになります。
Type of arg 1 to push must be array (not array element)

237 名前:nobodyさん mailto:sage [2011/10/24(月) 13:36:02.75 ID:???]
push @{$h{$i}}, "aaa";

238 名前:nobodyさん mailto:sage [2011/10/24(月) 13:50:46.81 ID:???]
>>237
上手くいきました。ありがとうございます。
こんな書き方理解できない。もうPerlやりたくない。

239 名前:nobodyさん mailto:sage [2011/10/24(月) 13:58:00.35 ID:???]
同じプログラムをRubyとPHPとPythonでは書き直せるんですけど、
Perlだけ作法が全然違うからわかわからないんですけど、どうすればいいですか?????????

240 名前:nobodyさん mailto:sage [2011/10/24(月) 15:33:37.66 ID:???]
Perl5.14でその配列が既に存在していれば、

use v5.14;
push $h{$i}, "aaa";

でいけるかな?



241 名前:nobodyさん mailto:sage [2011/10/24(月) 17:29:05.68 ID:???]
>>239
全然違うってほどのもんじゃないとは思うけど。
例えばどんなところが書き直せないの?

242 名前:nobodyさん mailto:sage [2011/10/24(月) 19:39:40.90 ID:???]
むしろその中だと、PHP←→Perlが一番簡単な気がするんだw

243 名前:nobodyさん mailto:sage [2011/10/24(月) 23:41:27.27 ID:???]
>>241
ハッシュとか配列とかの操作でカッコとか記号とかが覚えられない。
代入するときも表示するときもアクセスの仕方が違ったりして覚えられない。ダンプするのも一苦労。
クラスのnewのblessとか未だに何なのかわからない。祝福とは???
リファレンスとかスカラーとかレキシカルとか聞き慣れない用語ばかり出てくる。
スコープとかクロージャとかJavaScriptの悪夢がよみがえる。
とにかく記号ばっかりで暗号いじってるみたいな意味不明さが怖い。

$hoge; $hoge{0}; $hoge->{0}; @hoge; @hoge{0}; @hoge->{0}; %hoge; %hoge{0}; %hoge->{0};
${$hoge}; @{hoge}; @{$hoge}; {@{$hoge{0}}} @{$hoge->[0]}; %{$hoge->[0]}; %{$hoge->{0}}

どれだよ!!!!!!!!111111111

244 名前:nobodyさん mailto:sage [2011/10/24(月) 23:51:16.92 ID:???]
独特の表記とか用語に拒否反応ってのはわからんでもないけど、
スコープとかクロージャ駄目ってんじゃ他の言語もまともに使えてないだろ……

245 名前:nobodyさん mailto:sage [2011/10/24(月) 23:54:49.09 ID:???]
>>243
意味不明って、単にPerlを知らないだけでは。
慣れればおいしいよ。

246 名前:nobodyさん mailto:sage [2011/10/25(火) 00:14:38.50 ID:???]
$hoge; スカラ
$hoge{0}; ハッシュ
$hoge->{0}; ハッシュへのリファレンス
@hoge; 配列
@hoge{0}; エラー 配列へのアクセスは $hoge[0] でアクセス
@hoge->{0}; エラー 配列へのリファレンスは $hoge->[0] でアクセス
%hoge; 連想配列
%hoge{0}; 記述エラー 連想配列内の要素は $hoge{0} でアクセス
%hoge->{0}; 記述エラ 連想配列へのリファレンスは $hoge->{0} でアクセス

${$hoge}; スカラのデリファレンス
@{hoge}; エラー
@{$hoge}; 配列のデリファレンス
{@{$hoge{0}}} 連想配列内の配列をデリファレンス ($hoge{0} の中に配列が入っている) ただし外の {} は括る必要なし。 この場合 {} はブロックになる。
@{$hoge->[0]}; 配列へのリファレンスの中の配列
%{$hoge->[0]}; 配列へのリファレンスの中の連想配列
%{$hoge->{0}} 連想配列へのリファレンスの中の連想配列

こんな感じのも良く使うので覚えた方がいいかも。
$hoge = {
  'array' => [], 連想配列へのリファレンスの中に配列を作る
  'hash' => { 連想配列へのリファレンスの中に連想配列へのリファレンスを作る
    'key1' => 'val',
    'key2' => 'val',
  }
};
それぞれへのアクセスは
$hoge->{'array'}->[1];
$hoge->{'hash'}->{'key1'};
となる。

247 名前:nobodyさん mailto:sage [2011/10/25(火) 00:41:32.32 ID:???]
> @hoge{0}; エラー 配列へのアクセスは $hoge[0] でアクセス

エラーではない
が、スライスを理解して使っているわけではなく、たまたま動いているだけ、の初心者が多いと思う

248 名前:247 mailto:sage [2011/10/25(火) 00:42:17.13 ID:???]
{} と [] を見まちがえた。ごめん。

249 名前:nobodyさん mailto:sage [2011/10/25(火) 01:04:32.90 ID:???]
@hoge{0} なら %hoge に対するハッシュスライスでしょ
warnings 有効なら @hoge{0} は警告出るだろうが、
@hoge{0..2} とか、 my @keys = (0); @hoge{@keys} なら問題ないはず

250 名前:nobodyさん mailto:sage [2011/10/25(火) 01:31:51.65 ID:???]
指摘のある通り、%hoge; と宣言されてるなら @hoge{0} は動作する。

けどね。
質問者がくじけてる部分を考えたらスライスは考えないほうがいいのでは?
という意味からエラーっていうことにした。

まぁ、言葉が足りなかったってのもあるけど ^-^;



251 名前:nobodyさん mailto:sage [2011/10/25(火) 01:51:36.00 ID:???]
>>246
> @{hoge}; エラー
エラーではない。

全ての変数や関数へのアクセス方法で一番冗長な書き方は sigil { (何か) } ([添え字]|{キー})
の形で、何かが裸の語なら変数名、リファレンスならデリファレンス、
それ以外なら何かの値を名前としたシンボリックリファレンスと解釈される。
通常の変数へのアクセスは、裸の語をデリファレンスすると捉えてもいい。

${ foo } … 通常の変数。{} は*省略可能*。 ${foo} = "foo${foo}foo$foo"; # ok
${ "foo" } … シンボリックリファレンス
${ $foo } … スカラーリファレンス $foo をデリファレンス
${ 'f' . 'oo' } … 式の値を名前としたシンボリックリファレンス
${ \ foo('bar') } … foo('bar') の戻り値のリファレンスのデリファレンス

perldoc.jp/docs/perl/5.10.0/perldata.pod#Slices
> (引用注: 添え字/キーの) かっこの種類(大かっこか中かっこか)は、見ているものが配列か
> ハッシュかをつかさどっています。一方、配列やハッシュの先頭の記号 ('$' か '@') は、
> 返ってくるものが単一の値(スカラ)か、複数の値(リスト)かを示しています。

use warnings; my @{foo} = ('a'..'f'); my %{bar} = ('g'..'j');
print ${foo}[3]; # 'd' へのアクセスで "d" を表示
print @{foo}[3]; # 警告有り。('d') へのアクセスで "d" を表示
print @{foo}[3,4]; # ('d','e') へのアクセスで "de" を表示
print ${foo}[3,4]; # 警告有り。リストをスカラーとして評価すると最後の値が返されるので "e" を表示
print ${bar}{'g'}; # 'h' へのアクセスで "h" を表示
print @{bar}{'g'}; # 警告有り。('h') へのアクセスで "h" を表示
print @{bar}{'g','i'}; # ('h','j') へのアクセスで "hj" を表示
print ${bar}{'g','i'}; # キー "g$;i" へのアクセスになるので undef

252 名前:nobodyさん mailto:sage [2011/10/25(火) 03:20:14.95 ID:???]
> print ${bar}{'g','i'}; # キー "g$;i" へのアクセスになるので undef
これだけ知らなかったわ。awk 由来なのかな。
まあ積極的に使う意義は無さそうだし、
人のコードで見かけることもないから覚えなくてもいいよね。

253 名前:nobodyさん mailto:sage [2011/10/25(火) 22:21:51.58 ID:???]
>>243
> クラスのnewのblessとか未だに何なのかわからない。祝福とは???
blessは意味わからないよね。
あれ、祝福とか変な言葉で説明するからわからんのさw
オレ流に説明してあげよう。

まず、これを実行してみよう。Dumperは変数の中身を表示する関数だ。use Data::Dumperが必要。
my $a = {key=>1};
print Dumper($a)

以下のように表示される。(改行インデントは折りたたむ)
そう、ようするにただのハッシュだ。
$VAR1 = {'key' => 1};


次に次の命令を実行してみよう。
my $a = {key=>1};
bless($a, "CLASS");
print Dumper($a)

以下のように表示される。さっきのハッシュの周りにCLASSが追加されている。
VAR1 = bless(  {'key' => 1},  'CLASS' );

つまりだ、これはCLASSという名前のクラス名(モジュール名)付きのハッシュということだ。
このモジュール名付きのハッシュにたいして、以下のように->を使って呼び出しをすると、
$a->foo()

$aにはCLASSというモジュール名が結びついているため、CLASS::foo()を呼び出すんだなとPerl実行環境は理解できる。
その時CLASS::foo()の第一引数に$aを渡すことで、foo()の中で$aの値の操作することが可能にある。

これでCLASSクラスのfoo()メソッド呼び出しの仕組みと、$aをCLASSクラスのインスタンスに変換することができた。

254 名前:nobodyさん mailto:sage [2011/10/25(火) 22:33:18.24 ID:???]
もう一つ、$a->foo() という書き方。

$a に bless使ってCLASSと結びつけたハッシュが入っていれば、
CLASS::foo()が呼び出されるわけだが、

$aは文字列でもよい。つまり、
$a = 'CLASS';
$a->foo();
この方式でもCLASS::foo()が呼び出せる。
通常は、CLASSを$aに入れずにそのまま書いて、CLASS->foo() となる。

でこれが foo()じゃなくて new() だと、CLASS->new() となる。
呼び出されるのは、当然CLASS::foo(); そして foo() の第一引数にはCLASSという文字列が入っている。

これを利用してCLASS::newされた時に、CLASSに結びつけたハッシュ、
つまりCLASSのインスタンスを返すことで、Perlにおけるnewの仕組みとなる。

あと余談。殆どの場合ハッシュにCLASSを結びつけるのだが、
別にただの値にCLASSを結びつけるのも一応可能。

255 名前:nobodyさん mailto:sage [2011/10/25(火) 22:34:03.01 ID:???]
訂正
×呼び出されるのは、当然CLASS::foo(); そして foo() の第一引数にはCLASSという文字列が入っている。
○呼び出されるのは、当然CLASS::new(); そして new() の第一引数にはCLASSという文字列が入っている。


256 名前:nobodyさん mailto:sage [2011/10/25(火) 22:36:14.83 ID:???]
> あと余談。殆どの場合ハッシュにCLASSを結びつけるのだが、
> 別にただの値にCLASSを結びつけるのも一応可能。


ただの値にblessはできんか。
何かしらの値のリファレンスにblessできる。

257 名前:nobodyさん mailto:sage [2011/10/25(火) 23:11:45.61 ID:???]
system("wget $url");
を使ってファイルをダウンロードしたいのですがうまくいきません。
perl というかwget の使い方の問題なのかもしれませんが、
適切な書き方をご存知のかたがいらっしゃったらおしえていただけませんか?

ダウンロードしたいファイルは以下のURLです。
ttp://ncode.syosetu.com/txtdownload/dlstart/ncode/108715/?no=1&hankaku=0&code=utf-8&kaigyo=CRLF

エラーとしては、こう言われます。
index.html?no=2&hankaku=0&code=utf-8&kaigyo=CRLF: Invalid argument
Cannot write to `index.html?no=2&hankaku=0&code=utf-8&kaigyo=CRLF' (Invalid argument).

258 名前:nobodyさん mailto:sage [2011/10/25(火) 23:53:11.13 ID:???]
自分は、たまーにハッシュに名前が欲しくて bless する事もあるw

use LWP::Simple;
my $data = get('URL');

特に認証がなければ、これで取得できるかと。

自分は

use LWP::UserAgent;
use HTTP::Request::Common;
use utf8;
my $ua = LWP::UserAgent->new;
 〜agent とか timeout とか max_redirect とか cookie の設定〜
my $req = GET('URL');
my $res = $ua->request($req);
my $content = $res->code() eq '200' ? decode('utf-8', $res->content()) : '';

ってやってる。
手順が多いけど、自分の頭ではこの方が使いやすい。

$res->code() eq '200' の部分は $res->is_success とかで置き換えられるけど、回線がパンパンのときに失敗すると
is_success は 1 を返すので信用出来ない。
HTML の取得なら、$res->content() に </html> が含まれるかどうかで判断した方が良い。
つっても、殆どの場合は is_success や is_error は正しく動作する。

259 名前:nobodyさん mailto:sage [2011/10/26(水) 01:13:19.12 ID:???]
>>257
wget は特に指定がなければサーバのパスに対応するファイル名でローカルに保存しようとするから、
? はファイル名に使えねえよと言われてるのでは。Windows ないから試せないけど。

>>258
sub is_info ($) { $_[0] >= 100 && $_[0] < 200; }
sub is_success ($) { $_[0] >= 200 && $_[0] < 300; }
sub is_redirect ($) { $_[0] >= 300 && $_[0] < 400; }
sub is_error ($) { $_[0] >= 400 && $_[0] < 600; }
sub is_client_error ($) { $_[0] >= 400 && $_[0] < 500; }
sub is_server_error ($) { $_[0] >= 500 && $_[0] < 600; }
# HTTP::Status より。

失敗したにもかかわらず is_success が真を返すというなら、
まず疑うべきは LWP でなくサーバ側のレスポンスでは?
原因がクライアント/サーバ/回線/他のいずれにせよ、
負荷等が原因で200以外の2xxが返ってくる状況なんてちょっと想像つかんが。

decode('utf-8', $res->content()) はよっっっぽど古いバージョンの LWP じゃない限り
$res->decoded_content(charset => 'utf-8') のほうがよかろ。

260 名前:nobodyさん mailto:sage [2011/10/26(水) 01:38:17.35 ID:???]
>>259
失敗なのに is_success が成功を返すのは少々特殊な状況なのは分かってる。

自宅でサーバー動かしてて家のルータは BA8000Pro なんだけど、BitTorrent で Linux ISO を放流してる。
バージョンアップがくるとコネクションがすごい数やって来て、NAT のテーブルが溢れて (上限は 2600)
名前解決すら頻繁に失敗するほど不安定になる。

この状況下で LWP で GET とかすると is_success が成功を返しても、->content() が全てを受け取ってないという事が起こる。

そのほかの環境は弄らずに BitTorrent だけ止めると LWP は正常に送受信できる。
これは何度も再現するのはテスト済。

ちなみに BitTorrent を動かしてるのは WEB サーバーとは別の PC です。
最近は BitTorrent 動かしてないからこういった症状ともおさらばで快適人生♪



>> decoded_content
おぉ〜、こんなメソッドあったんですね。ありがとう!
常々 Encode 呼び出すのめんどくせーって思ってたんで助かる。




261 名前:nobodyさん mailto:sage [2011/10/26(水) 02:43:24.74 ID:???]
>>259
>>257です。
アクセスが出来ないじゃなくて、書き込みができないっていう意味だったんですね。
もっと自分でよく考えてみるべきでした。

-Oオプションを付けて書き込むファイル名を指定したところ上手くいきました。

知恵を貸していただきありがとうございます。

262 名前:nobodyさん mailto:sage [2011/10/27(木) 00:59:33.75 ID:???]
>>244-256
あんなふざけたレスにマジレス返してくれてどうもありがとうございます。
まだ全部は試せてないですが、>>246とか物凄く参考になっています。
perldoc.jpなども読んで、もう少し勉強してみますね。

263 名前:nobodyさん mailto:sage [2011/10/27(木) 01:39:37.97 ID:???]

変数名の前の @、$、% の意味 (* ってのもあるけど、難しいので放置で OK)
変数に代入するときの { }、[ ]、( ) の意味を覚えるだけで、理解度はかなり違うと思います。

あとは perl の自由な書き方に慣れていただくしかw

264 名前:nobodyさん mailto:sage [2011/10/27(木) 16:41:18.27 ID:???]
たまに間違う… そういえばあんまり代入の時に [ ] って使わないなあ。
使ったことがないわけじゃないんだけど。

265 名前:nobodyさん mailto:sage [2011/10/27(木) 18:34:30.14 ID:???]
最近は面倒くさいので $data = [] とか $data = {} とかで済ますこと多いな。


266 名前:nobodyさん mailto:sage [2011/10/28(金) 20:00:02.80 ID:???]
Perlでw3mのようなコンソールアプリケーションを作る方法はあるのでしょうか?
環境はLinuxです。

よろしくお願いいたします。

267 名前:nobodyさん mailto:sage [2011/10/28(金) 20:16:08.47 ID:???]
curses を扱うモジュールはあるみたいだし、できるんじゃね
Python とかのほうが向いてる気はするけど

268 名前:nobodyさん mailto:sage [2011/10/30(日) 22:07:34.60 ID:???]
みなさんモデリングツールでUMLは使ってますか?
もし使ってる方はどのソフト使ってますか?

ttp://hibari.2ch.net/test/read.cgi/tech/1147499933/
↑ここでperlの話題がなく、「perl uml」で検索してもそれらしいものが見つからなかったので質問しました。
UMLを勉強しようと思うのですがどのツールがいいのかもわかりません。。

269 名前:268 mailto:sage [2011/10/31(月) 00:15:05.76 ID:???]
>UMLを勉強しようと思うのですがどのツールがいいのかもわかりません。。

これはココだとスレ違いですね。
この一文は無視して下さい。

270 名前:nobodyさん mailto:sage [2011/11/01(火) 11:30:50.31 ID:???]
バイナリデータについて質問です。
docomo携帯の太陽のSJIS絵文字コード(F89F)を表示しようとしたのですが、
(1)は表示されて、(2)は単なる文字列になっているようでした。
\x{}といった表記ではバイナリにならないのでしょうか?
また、バイナリにする場合、""での設定やpack()など色々あると思うのですが、
処理が速いのはどの方法になるのでしょうか?

(1)my $sun = "\xF8\x9F"

(2)my $sun = "\x{F89F}"




271 名前:nobodyさん mailto:sage [2011/11/01(火) 13:02:20.96 ID:???]
>>270
perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators
> If the number is 256 (0x100, 0400) or above, Perl interprets it as a Unicode code point
> and the result is the corresponding Unicode character.

www.nttdocomo.co.jp/service/developer/make/content/pictograph/basic/

よって iモードの Shift_JIS で "\xF8\x9F" に割り当てられている絵文字を
iモードの UTF-8 のページで出したければ "\xEE\x98\xBE" 。
(Perl用語で言うところの) Unicode 文字列なら "\x{E63E}" 。

参考ページ:
>>2
perldoc.jp/docs/perl/5.10.0/perluniintro.pod
search.cpan.org/dist/Encode-JP-Mobile/lib/Encode/JP/Mobile.pm
search.cpan.org/dist/Unicode-Japanese/lib/Unicode/Japanese/JA.pod

272 名前:270 mailto:sage [2011/11/01(火) 15:15:58.07 ID:???]
>>271
解決しました。
詳しい説明ありがとうございました。

273 名前:nobodyさん mailto:sage [2011/11/01(火) 15:20:02.29 ID:???]
my $a = {
x => [ 'a', '1' ],
y => [ 'b', '2' ],
z => [ 'c', '3' ],
};

my $b = map{}???

上記で$bに下記のようにセットするにはmapのところをどのように書けばよいでしょうか。

$b = {
x => 'a-1',
y => 'b-2',
z => 'c-3',
};

274 名前:nobodyさん mailto:sage [2011/11/01(火) 15:36:36.16 ID:???]
>>273
$b = { map { $_ => "$a->{$_}[0]-$a->{$_}[1]" } keys %$a };
# or
$b = { map { $_ => join '-', @{ $a->{$_} }[0,1] } keys %$a };

275 名前:nobodyさん mailto:sage [2011/11/01(火) 15:59:53.49 ID:???]
>>273
my $b = { map ref $_ ? join('-', @$_) : $_, %$a };
my $b; %$b = map ref $_ ? "$_->[0]-$_->[1]" : $_, %$a;

276 名前:273 mailto:sage [2011/11/01(火) 16:40:41.18 ID:???]
>>274,275

解決しました。
回答が早くて助かりました。
ありがとうございます。

277 名前:nobodyさん mailto:sage [2011/11/01(火) 17:31:41.93 ID:???]
サンプルとはいえ$aと$bは安易に使わないほうがいいぞ

278 名前:273 mailto:sage [2011/11/01(火) 17:56:13.77 ID:???]
use HTML::Template について質問です。
テンプレートファイル内で、「html出力させないコメント」というのは書けないのでしょうか?
例えば下記の#の行はoutputで出力させないといった動作をさせたいです。
もしできないのであれば、使用されている皆さんはコメントを書きたい時、<!-- -->で対応しているのでしょうか?

<html>
<head>
<title>hoge</title>
</head>
<body>
fuga<br>
#コメントを書きたい
</body>
</html>

279 名前:nobodyさん mailto:sage [2011/11/02(水) 04:52:21.99 ID:???]
>>278
無かったはず。

ただし、new()の際にfilterを設定することで、前処理を行うことが出来る。
これを利用して、特定の文字列を置き換える(削除する)ことは可能。
詳細はドキュメントを参照されたい。

HTML::Templateは痒いところに届かないというか、痒み?何それ? って作り方だからなあ。
非PGのデザイナーにテンプレートファイル作りを任せるなら、これくらいじゃないと使ってくれなかったりするがw


280 名前:nobodyさん mailto:sage [2011/11/02(水) 07:58:44.36 ID:???]
>>276
案の定Wikipediaの丸暗記か



281 名前:nobodyさん mailto:sage [2011/11/02(水) 10:15:20.86 ID:???]
>>280
君はまた見えない敵を作って、勝手に戦うのかい?

282 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 03:59:56.91 ID:???]
>>280

おみそれいたしました。
丸暗記だと応用が効かなくて行き詰ってしまうことが多いです。

283 名前:nobodyさん mailto:sage [2011/11/03(木) 20:45:59.15 ID:???]
↓こちらのスレで誘導されてこの板に来ました。

Perlについての質問箱 49箱目
hibari.2ch.net/test/read.cgi/tech/1319953460/100-102n

Windows 2000、Activeperl 5.8 の環境で、
use Socket;
socket(・・・);
connect(・・・);
な感じでインターネット上のwebサイトからページを取得してるんだけど、
サイトの応答が遅いとき、応答が帰ってくるまでCPU負荷が100%近くになる。

これってどういった原因が考えられますか?
あるいは仕様でしょうか。
PCのスペックはWin2000を使っているというあたりで想像いただける通りかなりしょぼいですが、それにしても負荷高すぎかな、と。

Activeperlのバージョン上げれば直るのかな…

284 名前:nobodyさん mailto:sage [2011/11/03(木) 22:20:35.11 ID:???]
パソコンを変えることができないなら、LANカードを取り替えるか
あるいは追加して、それを使うようにして対処。
今使っているLANカード+ドライバが割込みに対応した作りではない
のでCPU負荷が100%近くになっている。

285 名前:nobodyさん mailto:sage [2011/11/03(木) 22:28:37.56 ID:???]
>>PCのスペックはWin2000を使っているというあたりで想像いただける通りかなりしょぼいですが
端折るな


ちなみに Pentium3 1GHz、ActivePerl 5.12 のうちの環境は sleep 使うと CPU 占有率が 80-90% とかになる。


286 名前:nobodyさん mailto:sage [2011/11/03(木) 22:52:53.96 ID:???]
>>284
LANカードの問題ですか。
ノートだから交換や追加は難しいですね…
>>285
すみません。
Pen4M1.8G(但し1.2G動作)です。

ありがとうございました。

287 名前:285 mailto:sage [2011/11/03(木) 23:57:43.11 ID:???]
NetBurst か。
デスクトップの Pentium4 ですら同じくロックまで落とすと Pentium3 に負けるからなぁ・・・
ただそれ以外の部分 (チップセットとかね) は Pentium3 世代よりも上だから、CPU はボトルネックとは考えられないか。

古いノートだったら 10Base-T とかの可能性も否定できないよね。

あとアンチウイルスとかスパイウェア関連は外すのも手。
TCP/IP の入出力を監視してたりするので負荷が掛かるのは当たり前だから。

定期的にスクレイピングのために Perl スクリプト走らせてるんだけど、
今見たら 60-80% の CPU 占有率だった。


これ以上はハードとか OS の問題になってきそうなのでスレ違いどころか板違いすらにもなってくるかな?w
その前に色々書いておく。

特に大事なデータが無ければ OS 再セットアップして、アンチウイルスとかスパイウェア関連は入れない。

もし直らなければ、ノートの製造が AOpen や Acer などの安かろう悪かろう的なメーカーでないか確認。
なおかつ使用チップセットが Intel 以外だった場合は遅いのはハードウェアが原因と見て良いかと。

上記以外のメーカーで Intel チップセットの場合は >>284 が書いたとおり LAN カードが怪しいかも?
USB の LAN もあるけど、そもそも負荷が高いので使っちゃだめ。 32bit CardBus が付いてるならその LAN カードを。

これでも駄目なら投げ捨てる。

288 名前:nobodyさん mailto:sage [2011/11/04(金) 00:21:01.33 ID:???]
CD起動のLinuxで同じスクリプトを実行してハードの問題かどうかを切り分けてみる。

289 名前:283 mailto:sage [2011/11/04(金) 08:21:22.37 ID:???]
>>287
ハードやOSの問題だと板違いですね。
ただ、ブラウザでアクセスしている場合にはそういった問題は発生しないのでperl側の問題という線も捨てきれないのかな、と。

ちなみに、常駐系のソフトは全て停止しても状態は同じでした。
とりあえず、まずはLANカードの線で、何か試す方法がないか検討してみます。

>>288
ちょっとハードルが高いですね。
Linixの知識は全くないので、そこにたどり着くまでの時間が取れそうにないです。

改めてありがとうございました。

290 名前:278 mailto:sage [2011/11/04(金) 11:25:15.47 ID:???]
>>279
最初に任意のルーチンの割り込みができるんですね。
いまバタバタしてるので時間が空いたらじっくり調べてみます。
ありがとうございました。



291 名前:nobodyさん mailto:sage [2011/11/05(土) 11:43:23.98 ID:???]
>>289
BIOSのIRQの設定も板違いですね。
そうだとするとLANカードを変えても同じことになりそうなので。

292 名前:nobodyさん mailto:sage [2011/11/06(日) 08:06:31.58 ID:???]
$test . '_aiueo'

こうゆう文字列でマッチさせようとしたときに、何も考えずに書けば

/$test_aiueo/

だけど、これじゃ $test_aiueo っていう変数は無いからエラーになるわけで、
$test という変数の直後に半角英数でマッチさせるにはどうすれば良いのでしょうか?


293 名前:nobodyさん mailto:sage [2011/11/06(日) 08:12:06.72 ID:???]
すんません解決しました。

/${test}_aiueo/

こうゆう書き方できるんですね。
$hash={} を %{$hash} とか普段から使ってるクセに、なんですぐに書けなかったんだろう。。。


294 名前:nobodyさん mailto:sage [2011/11/06(日) 10:03:01.99 ID:???]
こういう

295 名前:nobodyさん mailto:sage [2011/11/06(日) 12:03:43.66 ID:???]
作ったスクリプトのどこの部分が処理に時間が掛かってるのか知りたいです。

処理ごとにデバッグプリントすれば可能ですが、非現実的だし、
後々デバッグプリントを消すのも手間なので、Perlでどこの部分で
時間が掛かってるとかのデバッグというか、トレースというか、
そういう事は出来るモジュールなどはあるのでしょうか?



296 名前:nobodyさん mailto:sage [2011/11/06(日) 12:30:01.91 ID:???]
>>295
perldoc.jp/docs/perl/5.10.1/perlfaq3.pod#How32do32I32profile32my32Perl32programs63

297 名前:nobodyさん mailto:sage [2011/11/07(月) 11:15:35.01 ID:???]
>>296
ありがとうございます。


#!/usr/bin/perl -d
use Devel::DProf;

で tmon.out を吐かせた後に dprofpp で得たいデータが取れました。


298 名前:278 mailto:sage [2011/11/07(月) 14:03:34.80 ID:???]
以前html::templateで質問したものです。
>>278の件は解決できました。
ありがとうございました。

もう一つ質問があります。
TMPL_INCLUDEのパスをcgi上でコントロールしたいのですが、下記のようなテンプレートはNGとなっています。

<TMPL_INCLUDE NAME="<TMPL_VAR NAME=incPath>">

そこでfilterを使って表現しようと思うのですが、どのようにすればよいでしょうか?
※cgi内の変数がfilter内のサブルーチンでそのまま使用できるのは確認できています。

my $incPath = './tmpl/inc.tmpl';
my $template = HTML::Template->new(
filename => './aaa.tmpl',
filter => sub{
my $ref = shift;
$ref =~ s/(\$[a-zA-Z0-9_]+)/eval($1)/g; #←ここの置換後の表現が思いつかないのでやりたいことのイメージを書いています。
},
);

--- template ---
<TMPL_INCLUDE NAME="$incPath">

299 名前:298 mailto:sage [2011/11/07(月) 17:02:01.60 ID:???]
>TMPL_INCLUDEのパスをcgi上でコントロールしたいのですが、

すみません。この一文はわかりづらいですね。
この文は無視してください。

300 名前:nobodyさん mailto:sage [2011/11/08(火) 02:25:10.62 ID:???]
>>298
コメント削除の件は解決して何より。

インクルードファイルを動的に制御するなら、素直に<TMPL_IF>や<TMPL_UNLESS>で分岐させるのが良いのでは。
もしくは、CGI側で別途に読み込んで、<TMPL_VAR>で吐き出すか。

インクルードファフィルのルートディレクトリを指定するだけなら、
new()の時に path を指定することでコントロールできるっぽい。


【余談】
HTML::Templateは条件分岐がマトモに書けないから、可能なら拡張モジュールの利用も考えてみて。
自分は使ったことがないんだけど
search.cpan.org/~samtregar/HTML-Template-Expr-0.07/Expr.pm
とかどうだろうか




301 名前:298 mailto:sage [2011/11/09(水) 16:21:33.08 ID:???]
>>300
もしかして279の方ですかね?
またまたご意見ありがとうございます。

色々試行錯誤しましたが、今回はfilterに下記のようにして対応することにしました。
$replace_ref = {
HENSUU => 'hogehoge',
};

filter{
$ref = shift;
$$ref =~ s|\[\#.*?\#\]||gxms; # [# 〜 #]までをコメント
$$ref =~ s|\[\%\s+([a-zA-Z0-9_]+)\s+\%\]|$replace_ref->{$1}|gxms; # [% 〜 %]を置き換え
}

----- html -----(どんなフォーマットがHTMLに影響ないかわからなかったので変数置き換えはtemplate-toolkitを参考)
<html><body>
[# コメント #]
変数=[% HENSUU %]
</body></html>
---------------

HTML::Template::Exprいいですね。
HTML::Template::Proにも取り込まれてるんで、高速化したい時には置き換えが簡単そう。
HTML::TemplateはIF文が貧弱すぎる。

302 名前:nobodyさん mailto:sage [2011/11/15(火) 20:21:14.83 ID:???]
パターンマッチについてなのですが、

-------------------
<span class="availGreen">在庫あり。</span> <a href="/gp/help/customer/display.html?&nodeId=915624">
在庫状況</a>について<br /> この商品は、<b><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=64
3004">Amazon.co.jp</a></b> が販売、発送します。 ギフトラッピングを利用できます。
-------------------
この文字列(実際には改行は入っていない)から、「Amazon.co.jp」(他の店名になることもある))の部分だけを取り出す為に

if ( $_ =~ />(.*?)<\/a><\/b> が販売/ ) {print $1;}
とすると、
-------------------
在庫あり。</span> <a href="/gp/help/customer/display.html?&nodeId=915624">
在庫状況</a>について<br /> この商品は、<b><a href="/gp/help/customer/display.html?ie=UTF8&nodeId=64
3004">Amazon.co.jp
-------------------
までが拾われてしまいます。

if ( $_ =~ /この商品は、<b><.*?>(.*?)<\/a><\/b> が販売/ ) {print $1;}
とすることにより、目的は達成できたのですが、何故最初のがダメなのかが良くわかりません。

なお、直前の「643004」の部分は場合によって変わるのでキーワードには出来ません。

303 名前:nobodyさん mailto:sage [2011/11/15(火) 20:47:48.16 ID:???]
何故って…
.*?にはタグ(<.*?>)を含まないなんてルールはないし

304 名前:nobodyさん mailto:sage [2011/11/15(火) 21:30:08.07 ID:???]
最小マッチの「最小」の意味を勘違いしてるパターンと予想。
.*? か .* かで影響されるのは "</a></b> が販売" の部分の探し方であって、
マッチすること自体が確定したら最初の ">" の位置は動かない。

関係ないが、この手の情報取得は可能ならまずAPIを検討すべき。
泥臭くスクレイピングするとしても、よほど高速性を重視するとかでなければ
正規表現じゃなくてTreeBuilderとかでDOMをパーズするほうが安全。

305 名前:nobodyさん mailto:sage [2011/11/16(水) 00:15:29.63 ID:???]
>>304
ありがとう。
最初の「>」で拾ってしまうんですね。

高速性の必要なものではなく、いくつかの商品の価格変化をログ取ってるだけなので、
API利用するところまでは考えてません。手続きめんどいので。

306 名前:nobodyさん mailto:sage [2011/11/16(水) 06:46:36.29 ID:???]
>>305
拾いたい箇所が1ファイルに1箇所くらいで構造も単純ならパターンマッチングの方が
手っ取り早いよね。
でも構造が繰り返しだったりややこしかったりする時はWeb::Scraperとか便利よ。

>>304
パーズ? パース? ← parse

307 名前:nobodyさん mailto:sage [2011/11/16(水) 07:50:11.05 ID:???]
考えるの面倒だからという理由で、モジュールに丸投げする底辺でゴメンナサイ

308 名前:nobodyさん mailto:sage [2011/11/16(水) 09:59:12.27 ID:???]
そのためのモジュールでしょ 無問題

309 名前:304 mailto:sage [2011/11/16(水) 10:04:04.24 ID:???]
ありゃ。smooth(ズ)→スムース みたいなもんで英語では parz って発音するものだと思い込んでたからそれに合わせてたわ。
調べてみたらイギリス英語系の辞書だとパーズだけど、アメリカ英語でパースが一般的みたいだからそっちのほうがいいや。サンクス

310 名前:nobodyさん mailto:sage [2011/11/16(水) 16:16:46.49 ID:???]
>>309
>イギリス英語

へー。良いことを知った。



311 名前:nobodyさん mailto:sage [2011/11/16(水) 16:34:39.13 ID:???]
本当だ。
2つ発音されるね。

parseの意味 - 英和辞書 - goo辞書
dictionary.goo.ne.jp/leaf/ej3/61513/m0u/parse/

312 名前:nobodyさん mailto:sage [2011/11/16(水) 16:52:26.25 ID:???]
そうか。どっちもありなんだ。
勉強になったぜ。

313 名前:nobodyさん mailto:sage [2011/11/16(水) 23:26:19.41 ID:???]
テキストファイルから3行だけほしいときって、1行で記述することってできますか?

今は for で回して push してるんだけど、
@lines = <$fh> x 3;
みたいな感じで書けたら落ですよね。。。

314 名前:nobodyさん mailto:sage [2011/11/17(木) 00:05:31.82 ID:???]
>>313
#!/usr/bin/perl -w
use strict;
my @line = (scalar <DATA>, scalar <DATA>, scalar <DATA>); # 幾つ?
print @line, "---\n"; seek DATA, -12, 1; @line = ();

@line = map scalar <DATA>, 0..2; # 0から2とは?
print @line, "---\n"; seek DATA, -12, 1; @line = ();

push @line, scalar <DATA> while @line < 3; # 意図が分かりやすい
print @line;

__DATA__
foo
bar
baz
quux

315 名前:nobodyさん mailto:sage [2011/11/17(木) 00:27:12.12 ID:???]
やっぱ、なんかしらで回すしか無いですよね。
ありがとうございました。

316 名前:nobodyさん mailto:sage [2011/11/17(木) 00:48:38.68 ID:???]
>>315
ループを避ける事自体が至上命令ならば >>314 の1番目か
$/ = \64; # 充分なサイズのバッファ
my @line = <DATA> =~ /^(.*\n)(.*\n)(.*(?:\n|\z))/;

317 名前:nobodyさん mailto:sage [2011/11/17(木) 00:53:27.15 ID:???]
@line = (<DATA>)[0..2];

318 名前:nobodyさん mailto:sage [2011/11/17(木) 09:42:10.49 ID:???]
至上主義ってわけじゃないんだけど、ループの中で特に処理をするわけじゃないから
1行で簡潔にできたら嬉しいよね〜

っていう程度です。


319 名前:nobodyさん mailto:sage [2011/11/18(金) 00:09:48.76 ID:???]
ループを決して書こうとしない部下を思い出した。
そいつは自分自身がループして同じ内容を必要な行数分タイプしてたっけ。

320 名前:nobodyさん mailto:sage [2011/11/18(金) 09:22:43.24 ID:???]
8bit機の時代はループの条件判定のタイムロスを惜しんで
ループ展開とかやったっけな。アセンブラで。



321 名前:nobodyさん mailto:sage [2011/11/18(金) 10:21:10.82 ID:???]
ループではないけど、100程度のif文を自動生成するプログラムなら見たことがある…

322 名前:nobodyさん [2011/11/18(金) 21:40:15.63 ID:1hunDax1]
入門書を読んでて気になったのですが
ダブルクォート文字列で使われるエスケープシーケンスと
マッチ演算子の中の正規表現で使われるエスケープシーケンスは
よく使われる改行文字(\n)やタブ(\t)などが両方にあるので
厳密に言えば違うけれども、大体同じものと理解していいのでしょうか?

それとも全く違う、あるいは全く同じものなのでしょうか?

323 名前:nobodyさん mailto:sage [2011/11/18(金) 21:56:27.18 ID:???]
覚えることが少なくなるように同じ記法を採用しているだけで、
それを解釈するコードは文字列と正規表現では別物だと考えて
ください。

324 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 13:39:08.87 ID:???]
全く同じであれば、本の記述は1回のはず。
別物だから区別して書いてあって、本に2回出てくる。

でも覚えやすいように同じ記法にしている。

325 名前:nobodyさん mailto:sage [2011/11/23(水) 23:35:55.57 ID:???]
やっと規制がとけました

>>323-324
ありがとうございます

326 名前:nobodyさん mailto:sage [2011/11/26(土) 22:25:41.09 ID:???]
CGIに値を渡したいときの方法で質問です。

@ttp://example.com/index.cgi/1/2/

と、PATH_INFOで渡すのと

Attp://example.com/?a=1&b=2

と、.htaccessに「DirectoryIndex index.cgi」を書いてPOST風?(呼び方がわからない)で取得する方法があると思いますが、
みなさんどちらを使っていますか?
どちらを使おうか悩んでいます。
(最初、index.cgiを消してPATH_INFOで渡せればすっきりするなと思いましたが、それだとttp://example.com/1/2/となって
index.cgiを読ませる場所とPATH_INFOの切り分けができないと気づいて今に至っています)

個人の好みになるかもしれませんが、こっちをこんな理由で使っているという感想などいただけたら参考にしたいと思います。
ちなみにformタグではGETを使用しています。

327 名前:nobodyさん mailto:sage [2011/11/26(土) 22:49:02.08 ID:???]
>>326
txqz.net/blog/2007/06/16/1641

328 名前:nobodyさん [2011/11/26(土) 23:38:20.62 ID:zFlJhwY9]
system()で外部コマンドを呼び出すと呼び出しは行われるのですが、そのあとの処理に進まずに
Internal errorになってしまいます。なにか呼び出し方があるのでしょうか

system '/bin/ls', "-la";
print "Location: index.html\n\n";


329 名前:nobodyさん mailto:sage [2011/11/26(土) 23:51:55.90 ID:???]
そのスクリプトを手元で実行したことはあるかい?

330 名前:nobodyさん mailto:sage [2011/11/27(日) 00:07:55.85 ID:???]
CGIで動かしてるんだったらHTTPサーバのログにエラー内容が記録されてるんじゃないか?



331 名前:nobodyさん [2011/11/27(日) 00:56:06.95 ID:E4v1+esL]
malformed header from script. Bad header=total 68: test.cgi, referer: redhat6/test.html
とか出てます。Systemを実行しなければこのメッセージは出ないです。


332 名前:nobodyさん mailto:sage [2011/11/27(日) 01:07:18.85 ID:???]
>malformed header
だからヘッダがどうなってるか見ろ

333 名前:nobodyさん [2011/11/27(日) 01:44:44.18 ID:E4v1+esL]
ls -la とか バイナリの実行ファイルとかですが、、、

334 名前:nobodyさん mailto:sage [2011/11/27(日) 02:47:47.23 ID:???]
うーん…
真っ先に HTTP ヘッダがなければCGIとして機能しないでしょ。
エラーになるのは当たり前。
でもって Location: で飛ばしてるんだから system '/bin/ls', '-la'; は全く意味がない。
仮に print "Location: index.html\n\n"; の次に置いても無視されるだけ。
そのCGIの目的(用途)は何なの?

335 名前:nobodyさん mailto:sage [2011/11/27(日) 03:52:11.45 ID:???]
ん? Location: 〜 を print しようがスクリプト自体は最後まで走るでしょ?
問題は system の出力先が標準出力、つまり普通に print するのと同じところに行ってるせいで、
スクリプトからサーバーへ渡される出力が

total 8
drwxr-xr-x 2 nobody nogroup 4096 Nov 27 00:00 ./
drwxr-xr-x 3 nobody nogroup 4096 Nov 27 00:00 ../
Location: index.html

みたいになってて、
サーバーとしては改行2つより前の部分は HTTP ヘッダとして解釈しなきゃいけない、
でも Location 以外の行は正しい HTTP ヘッダではない。
だからそこで内部エラーとして止めてる、ってことでは?
CGI 試す環境ないんで推測だけど。

336 名前:nobodyさん mailto:sage [2011/11/27(日) 04:36:05.90 ID:???]
>>335
だからそう書いてるだろ。

337 名前:nobodyさん mailto:sage [2011/11/27(日) 23:08:22.74 ID:???]
>>332
「ヘッダ」が分からないので見ろといわれてる対象が分かっていない
に一票。

つまり
print "Location: index.html\n\n";
は、理解して書いているのではなく、他のプログラムのコピペ。

338 名前:nobodyさん mailto:sage [2011/11/27(日) 23:27:05.03 ID:???]
print "Location: index.html\n\n"; の前に system を置いちゃうくらいだからそうなんだろうな。

339 名前:nobodyさん mailto:sage [2011/11/28(月) 01:55:16.13 ID:???]
ここまで答えのようなヒントが出てれば、あとは大丈夫でしょう。きっと・・・

340 名前:326 mailto:sage [2011/11/28(月) 15:55:21.96 ID:???]
>>327

ありがとうございます。
作成中のものはエントリのページなのでPATH_INFOで渡したいと思います。

この場合、URLからindex.cgiを消して尚且つPATH_INFOを取得するには
どのようにしたら良いのでしょうか?

ttp://example.com/index.cgi/1/2/

ttp://example.com/1/2/
にして、index.cgiを実行し、PATH_INFOから"/1/2/"取得したい



341 名前:326 mailto:sage [2011/11/28(月) 16:21:49.46 ID:???]
>>340
を実現するためググってみました。

ttp://hatsugen.zakzak.co.jp/qa6717936.html

↑ここの「ANo.3」で下記のように書かれていました。


たとえば、httP://hoge.com/A/B というURLをブラウザに与えると、ブラウザはHTTPサーバー(hoge.com)に対して、/A/Bという
ファイルを送れと要求します。
サーバーはこれを探しますが、Bというファイルがなければ、それをディレクトリとみなして/A/B/として/A/B/を探します。
それが存在していれば開いてみます。
 httpd.confや.httaccessで下のように指定してあれば、
<IfModule dir_module>
  DirectoryIndex index.html index.htm index.cgi index.sh
</IfModule>
 前から順番にファイルを探して表示します。いずれもなければ、またこれも設定にしたがってディレクトリ内のファイル一覧を表示するか、
エラーを返すか、その指定もなければ/B/を切り捨てて環境変数に格納し、/Aについて同様な処理を繰り返します。


つづく

342 名前:326 mailto:sage [2011/11/28(月) 16:23:22.87 ID:???]
つづき

そこで下記を行いました。

@ttp://example.com/ の階層にindex.cgiと下記一行を書いた.htaccessを置きました。
DirectoryIndex index.cgi

Attp://example.com/で、ttp://example.com/index.cgiにアクセスしたことを確認しました。

Bttp://example.com/a/にアクセスするとエラーになりました。

ttp://example.com/a/というディレクトリは存在していないので、
一つ上がったttp://example.com/のindex.cgiを探しに行くのではないかと思うのですが
何か間違えているのでしょうか?
どこをどうすればできるようになるのか教えてください。

343 名前:nobodyさん mailto:sage [2011/11/28(月) 16:28:04.90 ID:???]
>>340-342
>>1
Apache〜嗜みとして〜 Part3
hibari.2ch.net/test/read.cgi/php/1043851302/
【Apache】mod_rewriteについて語るスレ
hibari.2ch.net/test/read.cgi/php/1023791370/

344 名前:342 mailto:sage [2011/11/28(月) 23:12:53.78 ID:???]
>>343
ここまでいくとCGIとは関係なくなってきますね。
誘導ありがとうございます。

質問は取り消します。

345 名前:nobodyさん [2011/11/30(水) 10:29:57.17 ID:gvpuZTLB]
以前、Perlのマニュアル(リファレンスドキュメント)をダウンロードしたことがあったのですが、
今行ったら見つかりませんでした
どのページの、どの部分からダウンロードにいけるのでしょうか?

また、以前ダウンロードした時はは内容が英語でした
出来れば日本語版があればそちらをダウンロードしたいのですが、どこか内でしょうか?

346 名前:nobodyさん mailto:sage [2011/11/30(水) 10:51:48.72 ID:???]
perldoc.jp

347 名前:nobodyさん mailto:sage [2011/11/30(水) 21:09:58.63 ID:???]
Markdown.plの出力結果にhtml, head, bodyなどの要素を加えたいんですが
そういうオプションとかってデフォルトの機能にはないですよね?

出力されたhtmlファイルを開く→先頭に書き足す→末尾に書き足す→上書き保存
という処理をするスクリプトを書くということ以上の解決策ってないですよね?

348 名前:nobodyさん mailto:sage [2011/11/30(水) 23:31:46.18 ID:???]
中間ファイル作らなくっても
先頭を書き出す→markdown.plを呼び出して結果を書き出す→末尾を書き出す→保存
でいいんじゃね?

349 名前:nobodyさん mailto:sage [2011/12/03(土) 17:25:31.47 ID:???]
>>347
>上書き保存という処理をするスクリプトを書くということ以上の解決策

何をもって上/下と言っているのか分からんが、Markdown.pl に書き足す
方法はなぜ思い浮かばないのか。

350 名前:nobodyさん mailto:sage [2011/12/03(土) 19:26:36.05 ID:???]
>>349
まあMarkdown.plはいじらないでそのまま使う方が自然だろう。
やるとしたら別名にリネーム(コピー)してから自分専用にカスタマイズ、かな。

ついでに350ゲト



351 名前:nobodyさん mailto:sage [2011/12/04(日) 11:44:58.71 ID:???]
>>347
作者に要望を出す。これ最強。たぶんやってくれる。

352 名前:nobodyさん mailto:sage [2011/12/05(月) 11:39:58.61 ID:???]
GoogleAnalyticsのモバイル版perlコードについて質問です。
下記の@の所って$ENV{'HTTP_REFERER'}が空だったら$refererはundefになりますよね?
ということはAの $referer eq "" でワーニングになるから、
修正したほうがいいですよね??

if ($referer eq "") { #→ ×
if (defined($referer) && $referer eq "") { #→ ○

#####################################################
# Copyright 2009 Google Inc. All Rights Reserved.
use URI::Escape;
use constant GA_ACCOUNT => 'MO-1887809-14';
use constant GA_PIXEL => '/ga.pl';

sub google_analytics_get_image_url {
my $url = '';
$url .= GA_PIXEL . '?';
$url .= 'utmac=' . GA_ACCOUNT;
$url .= '&utmn=' . int(rand(0x7fffffff));
my $referer = $ENV{'HTTP_REFERER'}; #@
my $query = $ENV{'QUERY_STRING'};
my $path = $ENV{'REQUEST_URI'};
if ($referer eq "") { #A
$referer = '-';
}
$url .= '&utmr=' . uri_escape($referer);
$url .= '&utmp=' . uri_escape($path);
$url .= '&guid=ON';
$url =~ s/&/&/g;
$url;
}

353 名前:nobodyさん mailto:sage [2011/12/05(月) 13:46:44.74 ID:???]
しっかりと書くなら
my $referer = exists $ENV{'HTTP_REFERER'} ? $ENV{'HTTP_REFERER'} : '-';
Referer: 0 は明らかに無効だから単に
my $referer = $ENV{'HTTP_REFERER'} || '-';

あと、uri_escape()でやるならURIつかったら
sub {
my $uri = URI->new(GA_PIXEL);
$uri->query_form(
'utmac' => GA_ACCOUNT,
'utmr' => $ENV{'HTTP_REFERER'} || '-',
...
);
return $uri;
}

354 名前:352 mailto:sage [2011/12/05(月) 15:34:16.27 ID:???]
>>353

my $referer = $ENV{'HTTP_REFERER'} || '-';

が自分にはしっくりきました。
ありがとうございます。
よくみたら $query は使ってないですね。
よくみてたら何か色々おかしなコードだ。

とりあえず感謝です。

355 名前:Web初級 [2011/12/08(木) 16:43:00.58 ID:bceXKvCi]
超初心者です。仕事でホームページ1つ作る事に成りました。
職場では私しかDTPの経験がありません(Webかじったのも私一人)。
イラストレーターからドリームウエバーへ、やっと持って来れるようになりましたが、
コーディングがさっぱり上手く行きません。2度ほどWebスクールにデータ持参で習いに
行きましたが、真似してもさっぱり上手く出来ません。
これじゃ何回習っても、金捨てに行くようなもので困っております。
簡単なビジュアルなので、ハイレベルな技術はいらないと思います。
分かりやすい本とかあれば最高なんですが、なにか名案ありませんか。
よろしくお願いします。

356 名前:nobodyさん mailto:sage [2011/12/08(木) 17:01:30.14 ID:???]
>>1を読むこともできないようじゃあ何もできないだろうねえ

357 名前:Web初級 [2011/12/08(木) 18:06:56.56 ID:bceXKvCi]
はははは‥…失礼しました。

nobodyさんが即答するスレでしたか、暗号のようなQAで驚きました。
おみそれしました。

358 名前:nobodyさん mailto:sage [2011/12/08(木) 23:09:44.53 ID:???]
>>355
355のレベルでこれから頑張るよりも専門の会社に発注して、
自分は本業に専念したほうがよい

359 名前: ◆gHpPvpjxUOSB mailto:sage [2011/12/09(金) 00:04:54.14 ID:???]
格安で俺が引き受けちゃるけんね

360 名前:nobodyさん mailto:sage [2011/12/09(金) 10:54:15.39 ID:???]
>>355
そりゃコーディング違いだ。
私もコーディングは外注した方が幸せになれると思う。そんな付け焼き刃じゃどうにもならんでしょ。



361 名前:Web初級 [2011/12/10(土) 08:46:00.83 ID:Suxg5Gi2]
買って来ました「ドリームウエバーCS5.5スーパーリファレンス」と
「3週間でマスターWebデザインの教室」の2冊、これ見て仕上げる
しかありません。やっと再就職して、よこされたのがこの仕事。
試用期間中だし、だれもウエブの事は知りません。
やるしかありません。

362 名前:nobodyさん mailto:sage [2011/12/10(土) 08:57:02.65 ID:???]
>>361
それと、Perlになんの関係が?

363 名前:nobodyさん mailto:sage [2011/12/10(土) 09:12:56.68 ID:???]
>>362
何がわからないのか、わかっていないやつだな。

364 名前:nobodyさん mailto:sage [2011/12/10(土) 09:49:06.29 ID:???]
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /

365 名前:nobodyさん mailto:sage [2011/12/10(土) 16:44:40.44 ID:???]
最近では、広告も電子化されてしまい、チラシといっても
なかなか通じません。

チラシの裏エディタを紹介しておきますね。
(私も愛用しています)

ttp://yuukiremix.s33.xrea.com/chirashi/

>>361
たぶん、それはくびっていう意味だと思うけど。

366 名前:nobodyさん [2011/12/10(土) 17:53:31.12 ID:bJAhMBsm]
Perl CGIで、
WEBページにラジオボタン、チェックボックスを配置して、
保存ボタンで各項目のチェック状態をDBに保存して、
次回ページを表示するときに、前回のチェック状態を再現させたいのです。

DBに保存まではできたのですが、ラジオボタンとかのチェック状態を設定するにはどうやればいいのでしょうか?

367 名前:nobodyさん mailto:sage [2011/12/10(土) 18:04:10.96 ID:???]
>>366
ラジオボタンやチェックボックスなら該当するinput要素に、
checked="checked"
ってすればいいとおもいます。

368 名前:nobodyさん [2011/12/10(土) 18:14:29.61 ID:bJAhMBsm]
>>367
HTMLのコードを出力する時に
if (checked) {
print <input type="radio" checked="checked">
else {
print <input type="radio">
}
とかやるってことですか?
数が多くてすごい大変なんだけど、これ普通のやり方なのかな

369 名前:nobodyさん [2011/12/10(土) 18:16:11.86 ID:phxklYwZ]
>>366

どんだけ馬鹿なの?消えろ

おおwwwwだっせーーーーーーーwwwwwwwwwwwwww

そんなチェック状態とか簡単に考え付くだろwwwwwwww
引き継げばいいだけなのにwwwwwwwwwww
頭悪すぎ

自分=ウサギ
お前ら=カメ

まじまだまだ寝てても平気みたいだね

370 名前:nobodyさん [2011/12/10(土) 18:18:06.55 ID:phxklYwZ]
こいつらがやってること全部できる

低レベルすぎる

やっぱりセンスが違うんだなあ



371 名前:nobodyさん mailto:sage [2011/12/10(土) 18:23:07.58 ID:???]
>>368
ヒアドキュメントに変数埋めといて、該当箇所だけにchecked="checked"が展開されるようにするとか、
input要素はループで生成するようにしておいて、if文減らすとか、とか、

372 名前:nobodyさん mailto:sage [2011/12/10(土) 18:27:04.72 ID:???]
保守性とるなら、配列かハッシュにラジオボタンやチェックボックスに必要な内容を入れといて
ループで処理かなぁ。

373 名前:nobodyさん mailto:sage [2011/12/10(土) 21:39:06.91 ID:???]
.emlからbase64の部分だけ正規表現で抽出する方法ってありますでしょうか?

374 名前:nobodyさん mailto:sage [2011/12/10(土) 22:10:18.53 ID:???]
あります。

375 名前:nobodyさん mailto:sage [2011/12/11(日) 11:50:08.36 ID:???]
えっ

376 名前:nobodyさん mailto:sage [2011/12/11(日) 12:15:53.32 ID:???]
なり

377 名前:nobodyさん mailto:sage [2011/12/11(日) 16:38:26.87 ID:???]
>>361
Perlでやれって言われたの?
今から短時間で実装するならPHPしかないんじゃないの。
Perlでテンプレートエンジンとウェブアプリケーションフレームワークの環境構築とかしてる時間はたぶんないんでしょう?

378 名前:nobodyさん mailto:sage [2011/12/12(月) 10:19:09.76 ID:???]
>>373
どなたか具体的な方法をお願いしますです

379 名前:nobodyさん [2011/12/12(月) 11:29:18.56 ID:8Y5nZNmR]
本文なのか添付なのか、plainなのかhtmlなのか・・・
質問がざっくばらんすぎなのでは?

380 名前:nobodyさん mailto:sage [2011/12/12(月) 12:26:49.55 ID:???]
ざっくばらんの使い方おかしくね?
アバウトすぎるとでも言いたいんだろうけど



381 名前:nobodyさん mailto:sage [2011/12/12(月) 14:15:46.02 ID:???]
ページにアクセスすると、POSTじゃない認証(Basic認証?)を使って表示されるページってありますよね
そのページをperlで取得しようと思っています。
ですが何度やっても401が帰ってくるばっかりでまったく進展しない・・・
#!/usr/local/bin/perl
$|=1;
print "Content-type: text/html\n";
print "\n";

#*一度authorization_basicでやってみました。*
#*他のサイトではうまくいったのですが 目的のサイトでは動作しなかった為*
#*ntlmを試しています*
use LWP::UserAgent;
use HTTP::Request::Common;

my $url = '認証が必要なURL';
# Set up the ntlm client and then the base64 encoded ntlm handshake message
my $ua = new LWP::UserAgent(keep_alive=>1);
# $ua->credentials('ホスト:80', '', "???\\ID", 'パスワード');
$request = GET $url;
print "--Performing request now...-----------<br>\n";
$response = $ua->request($request);
print "--Done with request-------------------<br>\n";
if ($response->is_success) {print "It worked!->" . $response->code . "<br>\n"}
else {print "It didn't work!->" . $response->code . "<br>\n"}

????の部分に思い当たる物が無いので ????\\を消して見てもだめでした。
どういった動きをしているのか、またなぜ失敗しているのかも負えず・・・困っています
宜しくお願いします

382 名前:nobodyさん [2011/12/12(月) 18:29:36.74 ID:8Y5nZNmR]
Google さんで 「LWP::UserAgent ベーシック認証」 でググると、一番上に出てくるんだけどね。
ちゃんと調べろよカス。



use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'www.example.com/secret.html');
$req->authorization_basic('fuga', 'hoge'); # 'ID', 'PASS'
my $res = $ua->request($req);

あと credentials はダイジェスト認証用じゃないかなと。
ベーシック認証なら authorization_basic を使う。
「ダイジェスト認証 領域名」 でググれば、知識も深まるかと思います。


ちなみに、僕は HTTP::Request::Coomon を使って $req = GET('www.example.com/secret.html'); って
やる方が好きです。

383 名前:nobodyさん mailto:sage [2011/12/12(月) 18:48:35.31 ID:???]
>>382
どうもありがとう御座います
やってみましたが401が帰ってきました・・・

何でなんだろう?
WWW-AuthenticateにはNegotiateとNTLMって出てるのにorz

384 名前:nobodyさん mailto:sage [2011/12/12(月) 19:57:09.04 ID:???]
NTLM ・・・ Windows認証か ・・・
perldoc.jp/docs/modules/libwww-perl-5.813/LWP/Authen/Ntlm.pod
領域名の部分をちゃんと指定すれば、最初のコードで認証できるかと。
とりあえずサーバーにIISを使ってるなら、そう書いた方が良いと思う。


385 名前:nobodyさん mailto:sage [2011/12/12(月) 20:04:00.94 ID:???]
>>384
すみませんサーバー側でIISを使ってるのかどうか 確認はしたのですが、確かではないのでorz
perlのコーディングとは違う質問で申し訳ありませんが、領域名っていうのはいったい何を指定すれば・・・
クライアント側で調べて分かる物なんでしょうか

386 名前:nobodyさん mailto:sage [2011/12/12(月) 20:39:55.27 ID:???]
認証の設定をするときに、サーバー側で設定するもの。

387 名前:nobodyさん mailto:sage [2011/12/13(火) 01:38:11.67 ID:???]
>>380
>>379は日本語がざっくばらんなんですな

388 名前:nobodyさん mailto:sage [2011/12/15(木) 18:36:11.15 ID:???]
Spreadsheet::WriteExcel でエクセルファイルを出力しています。
セルはAからZ列があってそこから先はAA,AB,ACと続くのはご存知だと思います。
このアルファベットを数字に対応させたいと思ってますがアイディアがでませんのでどなたかご教示くださいませ。
1→A ,2→B,26→Z まではできるのですが( chr($_ + 0x60) )、27→AA,28→AB 以降をどうするかがわからないのです。
よろしくお願いいたします。

389 名前:nobodyさん mailto:sage [2011/12/15(木) 19:08:41.22 ID:???]
$c=q{z};print++$c

390 名前:388 mailto:sage [2011/12/15(木) 19:27:18.02 ID:???]
すいません、説明が不足してました。申し訳ございません。
数字が26なら一発でZに、28なら一発でABに変換したいのです。



391 名前:nobodyさん mailto:sage [2011/12/15(木) 20:03:59.53 ID:???]
再帰処理するサブルーチンでも作れば?

392 名前:nobodyさん mailto:sage [2011/12/15(木) 20:45:17.94 ID:???]
sub convert {
my $n = shift;
my $al = shift || '';
return $n > 0 ? convert(int(($n - 1) / 26), chr(0x41 + ($n - 1) % 26) . $al) : $al;
}
print convert(28); #=> 'AB'

393 名前:388 mailto:sage [2011/12/15(木) 20:50:09.96 ID:???]
>>392
完璧です。
ありがとうございました。

394 名前:nobodyさん mailto:sage [2011/12/15(木) 21:08:20.48 ID:???]
>>388
Spreadsheet::WriteExcel って、行・列ともに数値で指定できなかったっけ?

search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.37/lib/Spreadsheet/WriteExcel.pm#Cell_notation

395 名前:nobodyさん mailto:sage [2011/12/16(金) 07:33:02.00 ID:???]
ムダナナヤミダッタトイウオチカ

396 名前:nobodyさん [2011/12/31(土) 11:42:50.17 ID:uq+4+jAH]
Perlにかぎったはなしではないのですが、

cgiに送るデータを
index.cgi?user=foo
ではなく、例えば
favstar.fm/tweets/popular
のようにディレクトリ風に送って
CGI側で受け取るにはどうすれば良いんでしょうか?

397 名前:日系アメリカ人 ◆japYJPNx6A mailto:sage [2011/12/31(土) 11:53:18.05 ID:???]
ディスパッチ

398 名前:nobodyさん mailto:sage [2011/12/31(土) 11:54:05.80 ID:???]
PATH_INFO

399 名前:nobodyさん mailto:sage [2011/12/31(土) 16:07:44.64 ID:???]
>>398
ありがとうございます!

400 名前:nobodyさん [2011/12/31(土) 17:34:33.56 ID:ELwS00/V]
www.nicovideo.jp/watch/sm16573796



401 名前:nobodyさん [2012/01/02(月) 00:05:58.15 ID:xN/cFjEo]
datファイルの中に書いてあるパスワードと一致した場合にページを表示させたいのですが
以下のソースでコマンドプロントから入力しても必ず失敗してしまいます

エラーはなく、perl -cw を使ってもOKになり問題はありませんでした

$datfile = "./add.dat";

open(DAT,"+< $datfile");
flock(DAT, 2);

$lock = <<"EOD";
<html><head><title>ページ</title></head>
<body>認証許可</body></html>
EOD

$line = <STDIN>;

chomp($line);

if ($line eq <DAT>) {
print "$lock";
}
else {
print "認証失敗";
}

close(DAT);

datファイルの中身は「t」という一文字が入っています
詳しい方、教えてください

402 名前:nobodyさん mailto:sage [2012/01/02(月) 00:34:00.94 ID:???]
$datfile の1行目に改行があるとかじゃないの?

print によるデバッグがしやすいから、面倒でも最初は変数に入れるクセをつけてみると良いかも。


403 名前:nobodyさん mailto:sage [2012/01/02(月) 07:39:45.76 ID:???]
まず use strict しろよ

404 名前:nobodyさん mailto:sage [2012/01/02(月) 09:01:46.53 ID:???]
あとコマンドプロントじゃなくてコマンドプロンプトな。

405 名前:nobodyさん mailto:sage [2012/01/02(月) 09:19:16.84 ID:???]
<DAT>からの入力をchompしてないからじゃね?

406 名前:nobodyさん mailto:sage [2012/01/03(火) 02:35:21.75 ID:???]
あまりに下らないミスすぎて、恥ずかしすぎてお礼も言えないってか?

407 名前:nobodyさん mailto:sage [2012/01/03(火) 08:07:23.54 ID:???]
お礼が欲しいなら2ちゃんねる以外でやれ

408 名前:nobodyさん mailto:sage [2012/01/03(火) 08:39:34.48 ID:???]
>>407
うるせえカス

409 名前:nobodyさん mailto:sage [2012/01/03(火) 08:59:10.49 ID:???]
罵倒されるのが嫌なら2ちゃんねる以外でやれw

410 名前:nobodyさん mailto:sage [2012/01/03(火) 11:26:01.27 ID:???]
まあコマンドプロントじゃしょうがないか



411 名前:nobodyさん mailto:sage [2012/01/03(火) 11:59:37.15 ID:???]
プロントにパスタでも食いにいくか。

412 名前:nobodyさん mailto:sage [2012/01/04(水) 19:27:09.19 ID:???]
Webブラウザで表示された内容を取得しようと思ったのですが、
私が欲しい情報はJavaScriptにより出力されたものであるために、
単純にPerlを用いただけでは難しいと分かりました。
どのように対処すれば、JavaScriptの表示部分を取得できるのでしょうか?
よろしくお願いいたします。

413 名前:nobodyさん mailto:sage [2012/01/04(水) 22:01:40.66 ID:???]
サーバーで javascript を走らせるフレームワークがあったような気がする

414 名前:nobodyさん mailto:sage [2012/01/05(木) 01:03:58.26 ID:???]
spidermonkeyとか?js読めばどこに通信して何をしてるか分かるから、js無くてもいけると思うけど。

415 名前:nobodyさん mailto:sage [2012/01/05(木) 01:39:51.36 ID:???]
Ajax で表示してるなら、firefox での拡張で HTTP 通信を覗けるのがあるから、
それで見張ればいい。

firefox 入れなくない!っていうなら snooper で見ればいい。

416 名前:nobodyさん mailto:sage [2012/01/05(木) 22:01:42.38 ID:???]
急にPerlでCGIプログラムをやることに。
みなさんIDEは何をお使いですか?

今んとこ慣れないEclipseでやろうと
思ってます。

417 名前:nobodyさん mailto:sage [2012/01/05(木) 22:27:56.90 ID:???]
Perlを始めとした動的言語では
コード補完もリファクタリングもヘルプも
中途半端にしかならないからIDEは重いだけだよ。

418 名前:nobodyさん mailto:sage [2012/01/05(木) 22:34:01.35 ID:???]
テキストエディタのみ

最近はブロックの折り畳みとかあるんで、充分強力

419 名前:nobodyさん mailto:sage [2012/01/05(木) 22:54:26.32 ID:???]
IDEに助けてもらおうと思ったんですが
効果が薄いようですね。
腹くくってエディタでやります。

420 名前:nobodyさん mailto:sage [2012/01/06(金) 02:05:15.33 ID:???]
各個人のポリシー次第。なのかもしれませんが、質問です。

モジュール ( .pm) を作ったときって、何かエラーが合った場合に
die でスクリプトを止めてしまってエラーを通知するべきか、
それとも STDERR にエラーを出力しつつスクリプトは止めないようにするべきか、
どちらがオススメのコーディングの仕方なんでしょう?



421 名前:nobodyさん mailto:sage [2012/01/06(金) 02:11:20.73 ID:???]
男は黙ってcroak

422 名前:nobodyさん mailto:sage [2012/01/06(金) 03:13:39.39 ID:???]
>>420
してほしい事をやらせて
してほしくない事をやらせなければよい。

423 名前:nobodyさん mailto:sage [2012/01/07(土) 06:25:16.35 ID:???]
>>421
croak が分からなかったので調べてみた。
呼び出し元が分かる die か。なるほど。
ワーニングには carp か。


ありがとう!



>>422
根本的に文章が読みとれてないですよ。


424 名前:nobodyさん mailto:sage [2012/01/07(土) 12:06:24.49 ID:???]
>>423
> 根本的に文章が読みとれてないですよ。
俺は422ではないが、そっくりそのままお返しする。

425 名前:nobodyさん mailto:sage [2012/01/07(土) 13:19:20.03 ID:???]
420は2択を迫っているが、422は場合によるといっていて、その場合についての説明もしている。
422が正解だと思うが。


426 名前:nobodyさん mailto:sage [2012/01/12(木) 05:19:37.52 ID:???]
どうすんのがいいのか聞いてんのに場合によりけりとしたり顔で言われたら脱力する
420は場合によりけりということがわかった上で、基本的なスタンスはどっちがいいか聞いてんじゃないの?

俺はプロセス殺すなー
変な値入ってんのに処理続けても意味ないし
warnなんてデバッグでしか使ったことないや

427 名前:nobodyさん mailto:sage [2012/01/12(木) 12:02:21.96 ID:???]
>>426
おまえも読解能力の欠陥持ちか。
「場合によりけり」では結局何も答えてないに等しいが、>>422はそんなこと書いてないだろ。
どういう時にどっちを選択すればいいかが簡潔に書いてあるだろ。

428 名前:nobodyさん mailto:sage [2012/01/14(土) 02:03:55.49 ID:???]
time_tが32bitか64bitかを調べる方法はありますか?
2038年1月19日3時14分7秒以降のUNIX時間を取得してみるよりスマートな方法で。

学校の宿題でカレンダーを作ったら2038年2月でずれちゃいました。

429 名前:nobodyさん mailto:sage [2012/01/14(土) 05:41:58.49 ID:???]
overflow 日付は分かってるんだから、最大値+1を与えた時に
日付がどうなってるか確かめればよい

430 名前:nobodyさん mailto:sage [2012/01/14(土) 10:28:47.22 ID:???]
> 2038年1月19日3時14分7秒以降のUNIX時間を取得してみる

これで充分スマートじゃないか?




431 名前:nobodyさん mailto:sage [2012/01/14(土) 12:11:45.71 ID:???]
俺に言わせれば、time_tが32bitか64bitかなんて重要な問題じゃないね。
本当に知りたいことは、2038年1月19日3時14分7秒以降が扱えるかだろう? (キリッ)

432 名前:nobodyさん mailto:sage [2012/01/14(土) 12:21:34.67 ID:???]
ぶってぇ釣り針垂らしやがって・・・

433 名前:nobodyさん mailto:sage [2012/01/14(土) 15:29:38.07 ID:???]
つーか「これは仕様です」で十分でしょ、実際仕様なんだから。
年が4桁で有限なのと同じでしょ。

434 名前:nobodyさん mailto:sage [2012/01/14(土) 15:46:35.43 ID:???]
・Perl 5.12 以降を使う
・Time::y2038 モジュールを使う
・DateTime モジュールを使う
のどれかで解決

435 名前:nobodyさん mailto:sage [2012/01/14(土) 16:24:02.91 ID:???]
他の人の労力で解決っているのは、仕事ではそうすべきだけど、
"トレーニング" である宿題ではそうすべきではない。むしろ
time_t にさえ依存せず、自力で10桁年カレンダーのような無駄
なものを作って自分自身の糧とすべし。

436 名前:nobodyさん mailto:sage [2012/01/14(土) 18:04:47.99 ID:???]
>>435
その考え方は賛成できるけど、このスレ的には「車輪の再発明」って言われちゃうんだよね〜 orz


437 名前:nobodyさん mailto:sage [2012/01/14(土) 18:26:43.69 ID:???]
じゃあ、トレーニングだ。

自分で考えろ。こんな所聞くな。
他の人の労力で解決すんな。

438 名前:nobodyさん mailto:sage [2012/01/14(土) 21:36:35.23 ID:???]
車輪の再発明はいいんだけど、大抵は独学のトホホなプログラムができあがあるから、せめて一度
既存モジュールの中身を読んでくれ。

439 名前:nobodyさん mailto:sage [2012/01/14(土) 23:37:55.97 ID:???]
先生のために宿題をするのか、自分のために宿題をするのか違い。

440 名前:nobodyさん mailto:sage [2012/01/15(日) 20:18:01.72 ID:???]
単位のためだろ



441 名前:nobodyさん mailto:sage [2012/01/15(日) 20:45:40.76 ID:???]
そういうの全く理解できないんでごめんな

442 名前:nobodyさん mailto:sage [2012/01/18(水) 21:06:05.29 ID:???]
元ファイルの内容を書き換えて別ファイルに保存する方法を教えてください。
元ファイル aaa.txt
変換プログラム trans.cgi
変換後のファイル bbb.txt

aaa.txt に書いてある「あ$kanaお」を読み込んで
trans.cgi にて$kana = きくけ; として変換し
bbb.txt に「あきくけお」で出力するには、どうしたらいいのでしょうか。

open関数で +< という読み書きでファイルを開いても
空テキストが作成されるだけで、うまくいきません。
どうかよろしくおねがいします。

443 名前:nobodyさん mailto:sage [2012/01/18(水) 21:27:56.62 ID:???]
open(my $infh, ?<:utf8?, ?input.txt?);
open(my $outfh, ?>:utf8?, ?output.txt?);
while(my $line = <$infh>){
  〜処理〜
  print $outfh $line;
}
close($outfh);
close($infh);

444 名前:nobodyさん mailto:sage [2012/01/18(水) 22:19:08.77 ID:???]
>>442
perldoc.jp/docs/perl/5.10.1/perlfaq5.pod

my %var = (FOO => 'bar');
open my $fh, '+<', $file or die $!;
read $fh => my $text, -s $fh;
$text =~ s/__([A-Z]+)__/$var{$1}/g;
seek $fh, 0, 0;
print $fh $text;
truncate $fh, tell;
close $fh;

open my $sfh, '<', $src_file or die $!;
open my $tfh, '>', $tmp_file or die $!;
while (<$sfh>) {
  s/__([A-Z]+)__/$var{$1}/g;
  print $tfh $_;
}
close $tfh and close $sfh or die $!;
rename $tmp_file => $src_file or die $!;

445 名前:442 mailto:sage [2012/01/18(水) 22:35:01.78 ID:???]
>>443さん
>>444さん

お返事ありがとうございました。
じっくり読んで頑張ってみたいと思います


446 名前:nobodyさん [2012/01/25(水) 02:08:42.13 ID:8GsK3GVU]
ファイルの置換について質問させてください。
コマンドラインから、
echo "test.txt" | xargs perl -pi -e 's/hoge/HAGE/g'
とすると正しく置換されるのですが、
ブラウザからapacheをとおして、スクリプト内で上記のコマンドを、
`echo "[フルパス]test.txt" | xargs perl -pi -e 's/hoge/HAGE/g'`

system "echo ¥"[フルパス]test.txt¥" | xargs perl -pi -e 's/hoge/HAGE/g'"
とするとうまく置換されないのはなぜでしょうか?
またこのケースですとスクリプト内での記述はどのようにするのが適切でしょうか?宜しくお願い致します。



447 名前:nobodyさん mailto:sage [2012/01/25(水) 03:35:55.61 ID:???]
CGI実行時のユーザ権限は
そのユーザ権限でファイルや当該ディレクトリは書き込み可能になっているか
をまずチェック。

448 名前:nobodyさん [2012/01/25(水) 03:57:31.07 ID:Arlh9fb/]
447さん
お返事ありがとうございます。ディレクトリとファイルは権限777にして試してみたのですが、
置換されませんでした。あとスクリプト中の文字のエスケープ漏れもみなおしてみたのですが、
結果変わらずでした。さらに調べてみます。ありがとうございます。

449 名前:nobodyさん mailto:sage [2012/01/25(水) 04:06:26.93 ID:???]
どう出来ないのか
エラーは出てないのか
端末でスクリプトを走らせたらどうなるか

450 名前:nobodyさん mailto:sage [2012/01/25(水) 08:23:33.82 ID:???]
Apacheのerrorログを見てみる ←基本



451 名前:nobodyさん mailto:sage [2012/01/28(土) 22:01:51.13 ID:???]
errorログを見て特に問題はないと思っていたら...

sendmailのログでしたorz←

452 名前:nobodyさん mailto:sage [2012/01/29(日) 11:48:32.08 ID:???]
コマンドラインやめてopen(FILE,"[フルパス]test.txt")しちゃいなよ

453 名前:nobodyさん mailto:sage [2012/01/31(火) 17:42:02.72 ID:???]
質問質問!
&sub1(qq(asdasdqwdasdasd));
sub sub1
{
while($_[0] =~ /asd/gs )#←@
{
print $_[0];#←@でマッチした中身を出力したいが、subの引数
}
}
こんな感じのプログラムを作ったのですが
$_[0]の中身が更新できなくて困っています・・・
どなたか回避する方法を教えてください!お願いします

454 名前:nobodyさん mailto:sage [2012/01/31(火) 17:56:37.52 ID:???]
/asd/gs
 ↓
/(asd)/gs


あとついでに書き直した。

sub1(qq(asdasdqwdasdasd));
sub sub1{
 my $str = shift || '';
 while($str =~ /(asd)/gs){
  print $1;
 }
}

慣れてくれば良いけど、初心者であるうちは $_ をそのまま使わずに関数内で変数を用意して
そこへ格納したほうがいいよ。


455 名前:nobodyさん mailto:sage [2012/01/31(火) 18:23:59.58 ID:???]
>>454
2つほど質問があるのですがいいですか!

456 名前:nobodyさん mailto:sage [2012/01/31(火) 18:26:09.85 ID:???]
お礼を書くのを忘れていました
>>454 さん ありがとう御座います。

457 名前:nobodyさん mailto:sage [2012/01/31(火) 18:52:11.00 ID:???]
don't ask to ask

458 名前:nobodyさん mailto:sage [2012/01/31(火) 21:02:02.01 ID:???]
CGIのデータベースを運用しています。

auの端末で検索できるものとできない機種があります。
同じ2009年にでたモデルでもできるできないがあります。
例えばCA002はできるけど、K002はだめ。

できないものは、何も検索フォームに入れないで検索してもダメです。

Jcode.pl 2.13でエンコードしてますが、
これが悪いのでしょうか?

どうしたら、文字検索をできるようにできますか?



459 名前:nobodyさん mailto:sage [2012/01/31(火) 21:33:09.50 ID:???]
>>458
携帯サイトのWebプログラムを語ろう Part3
kohada.2ch.net/test/read.cgi/php/1232544986/

460 名前:nobodyさん mailto:sage [2012/01/31(火) 22:38:52.20 ID:???]
表示してる文字コードはなにか

端末が送ってきてる文字コードは本当に希望したものか




461 名前:nobodyさん mailto:sage [2012/01/31(火) 22:46:58.04 ID:???]
>>460
Shift_JISです。

462 名前:nobodyさん mailto:sage [2012/01/31(火) 22:57:27.90 ID:???]
utf-8 で書きませう

463 名前:nobodyさん mailto:sage [2012/01/31(火) 23:06:58.71 ID:???]
Jcode.pmの好きなおいらがアドバイスしにやってきたょミ☆
初心者スレだしねミ☆

464 名前:nobodyさん mailto:sage [2012/01/31(火) 23:43:18.05 ID:???]
>>462
邪悪なutf-8イラネ

465 名前:nobodyさん mailto:sage [2012/02/01(水) 00:41:51.19 ID:???]
たしかに utf-8 はマッピングミスとかあるけど、
他からデータを持ってきたりとかしない場合には utf-8 で問題無い。


466 名前:nobodyさん mailto:sage [2012/02/01(水) 01:42:35.88 ID:???]
Shift_JIS vs UTF-8 のゴングが今、スレ内に鳴り響きました!

467 名前:nobodyさん mailto:sage [2012/02/01(水) 04:46:09.17 ID:???]
まずはアクセスログと標準入力に何が渡されたかを見る。

468 名前:nobodyさん mailto:sage [2012/02/01(水) 06:04:45.99 ID:???]
>>466
プログラム板でやれ

469 名前:nobodyさん mailto:sage [2012/02/01(水) 23:55:30.88 ID:???]
続きはSJIS板で

470 名前:nobodyさん mailto:sage [2012/02/03(金) 01:56:38.79 ID:???]
cp932板はありますか?



471 名前:nobodyさん mailto:sage [2012/02/03(金) 02:11:46.79 ID:???]
あるよ

472 名前:nobodyさん mailto:sage [2012/02/04(土) 02:53:54.65 ID:???]
LWP::UserAgent で指定 URL をアクセスして、リダイレクトされた際に実際にアクセスした URL を知るにはどうしたら良いでしょうか?

header('Location') で調べれば良いと思ったものの、リダイレクトされた後には Location ヘッダは無く、
max_redirect(0) でリダイレクトさせなければ Location ヘッダを取得できて、リダイレクト先を知ることは出来ました。

max_redirect(0) でアクセスして、Location ヘッダがあれば max_redirect(1) とかにしてアクセス。
リダイレクトが1回で済まなければ max_redirect(2) でアクセスしてみる。

と言ったことをやってるのですが、これが非常に面倒なので結果的にアクセスした URL が取得できればと考えて質問させていただきました。

473 名前:nobodyさん mailto:sage [2012/02/04(土) 03:45:11.91 ID:???]
>>472
response_done ハンドラか response_redirect ハンドラに URL を記録する処理を追加する。
search.cpan.org/dist/libwww-perl/lib/LWP/UserAgent.pm#Handlers

474 名前:nobodyさん mailto:sage [2012/02/04(土) 09:09:19.56 ID:???]
んなことしなくても、
HTTP::Response オブジェクトは使われた HTTP::Request オブジェクトを丸々保持してるし、
リダイレクト前の Response も previous メソッドでたどれる。

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->get("t.co/hog7vmt5");
do { print $res->request->uri, "\n"; } while ($res = $res->previous);
__END__
www.asahi.com/national/update/0204/TKY201202030789.html
t.asahi.com/5gxs
t.co/hog7vmt5

475 名前:473 mailto:sage [2012/02/04(土) 09:40:24.08 ID:???]
>>474
成程、そっちをみれば良かったのか。勉強になったよ。

use LWP::UserAgent;
my $r = LWP::UserAgent->new->get('t.co/hog7vmt5');
print map $_->request->uri . "\n", $r->redirects, $r;
__END__
t.co/hog7vmt5
t.asahi.com/5gxs
www.asahi.com/national/update/0204/TKY201202030789.html

476 名前:nobodyさん mailto:sage [2012/02/04(土) 16:24:03.95 ID:???]
>>473-475
自分には >>474 さんの書き方がしっくりきたので、
これでいこうと思います。
ありがとうございました。



どうでもいい事だけど・・・
do{ }while( ) ってあまり好きじゃないw
ループの条件式が後に来るってーのが、なんか馴染めない (^-^;

477 名前:nobodyさん mailto:sage [2012/02/05(日) 04:49:54.12 ID:???]
>>476
> do{ }while( ) ってあまり好きじゃないw
> ループの条件式が後に来るってーのが、なんか馴染めない (^-^;

その方が都合のいいケースもたまにあるでしょ。
最低1回は処理が必要、って時が。たまにね。

478 名前:474 mailto:sage [2012/02/05(日) 10:00:34.05 ID:???]
動作というより記法について言ってるのでは。
特にブロックの中身が複数行のときは最後の while を見るまでループだってことがわからんのが痛い。
あとまあ、動作も実際気持ち悪い。本物のループブロックじゃないから next とか使えんし。
まともに書く時はちょっと記述増えることになっても普通の while と last とかを組み合わせるほうがいい。

479 名前:nobodyさん [2012/02/06(月) 18:29:54.91 ID:ryr2jQRg]
Perlによるネットワークプログラムの質問です。
Perl でアクセスしたいサイトがあるのですが、Perlからhtmlを読むことが出来ません。
IE8の「ソースを表示」では表示できるのですが。

アクセスしたいサイト :cinema.pia.co.jp/
Perlのスクリプトの場所 :x68000.q-e-d.net/~68user/net/sample/http-client-2.pl
その説明 : x68000.q-e-d.net/~68user/net/http-3.html

【実行結果】
perl http-client-2.pl -GET cinema.pia.co.jp/
HTTP/1.1 200 OK
Date: Mon, 06 Feb 2012 09:25:43 GMT
Server: Apache
Last-Modified: Fri, 28 Aug 2009 06:41:24 GMT
ETag: "304a0-2-f9082d00"
Accept-Ranges: bytes
Content-Length: 2
Connection: close
Content-Type: text/html

1

で終わってしまい、肝心のHTMLのBODYの部分を表示する事が出来ません。
どなたか分かる方教えてください。

480 名前:nobodyさん mailto:sage [2012/02/06(月) 20:02:58.69 ID:???]
LWP 使えば?



481 名前:nobodyさん mailto:sage [2012/02/06(月) 20:18:45.51 ID:???]
>>480
オレもLWP使うに1票

482 名前:nobodyさん mailto:sage [2012/02/06(月) 22:10:48.93 ID:???]
wget使えば?

483 名前:nobodyさん mailto:sage [2012/02/06(月) 22:53:24.14 ID:???]
一度やってみたかったのでtelnetにコマンドを流し込みます。
覚えるともう、病みつきです。ftpもこれでやってます。
sendmailだって大丈夫です。

484 名前:479 [2012/02/07(火) 01:13:45.57 ID:eo0HNsOB]
>>479 です。返信ありがとうございます

>>480 >>481
LWP 使ってみました。www.sea-bird.org/doc/Solaris8/Perl_4.html
出来ました
>>482
wget をPerlから?使う方法が分かりませんでした。コマンドとして使うという事なら目的と違います
>>483
上記チュートリアルサイトにて telnet も試しましたが、駄目でした


実は本当にやりたいことは別にあったので、すみませんが質問をやり直させてください

このサイトは、映画レビューサイトなのですが、
cinema.pia.co.jp/user/xxxxx/imp/all/ (xxxxxは数字)
にて、各ユーザーのレビュー一覧を見る事が出来ます
(実は自分のレビューを抽出したいだけです)
しかし、Perlからのアクセスでは、LWPを使ってもここではじかれてしまいます
(IE8の「表示→ソース」では見れるが、Perlにprintさせると違うものになっている)

どなたか原因分かりますでしょうか?

485 名前:nobodyさん mailto:sage [2012/02/07(火) 01:25:44.20 ID:???]
「違うもの」が何だか分からないけど、ユーザーエージェントをIEにしてみたら?

486 名前:nobodyさん mailto:sage [2012/02/07(火) 01:48:21.80 ID:???]
>>484
use LWP::UserAgent;
use HTTP:Request::Common;
my $ua = LWP::UserAnget->new();
$ua->agent('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)');
my $req = GET('cinema.pia.co.jp/user/xxxxx/imp/all/');
my $res = $ua->request($req);
if(open(my $outfh, '>', 'debug.html')){
print $outfh $res->content() || '';
close($outfh);
}


487 名前:479 mailto:sage [2012/02/07(火) 03:24:39.22 ID:???]
>>479 です。ありがとうございます

>>485 駄目でした。ソースの190行目辺りからが違ってきます
上手くいく時は、以下のようになります。良く分かりませんが。
<div id="mainImpMain">
<form method="get" class="common">
<ul class="pagedLink">

>>486
出来ました。ありがとうございました。

488 名前:nobodyさん mailto:sage [2012/02/07(火) 23:59:17.86 ID:???]
>>487
何がだめだったのか、ちゃんと理解できてる?

489 名前:nobodyさん mailto:sage [2012/02/08(水) 00:00:54.11 ID:???]
HTTP ヘッダに独自のヘッダを付加しようとしてるんですけど、
自分自身が呼ばれて起動された際の HTTP ヘッダってどうやって確認するのでしょうか?

use CGI の header はヘッダを出力するためのものっぽいし・・・

490 名前:nobodyさん mailto:sage [2012/02/08(水) 00:27:39.96 ID:???]
>>489
それはあんたのスクリプトがどうやって呼び出されているかによる。
httpd に Apache を使ってて CGI 経由で呼び出されているなら
Apache のマニュアルと CGI の仕様書を読んでくれ。
httpd.apache.org/docs/
www.studyinghttp.net/rfc_ja/rfc3875

あと HTTP の仕組みもきちんと理解してくれ。
www.studyinghttp.net/rfc_ja/rfc2616



491 名前:nobodyさん mailto:sage [2012/02/08(水) 00:51:03.57 ID:???]
HTTP ヘッダの理解を深める為にマニュアルや RFC を求めてるんじゃなくて、
自身のスクリプトが呼ばれた際の HTTP ヘッダを得る方法を伺っているわけでして・・・


492 名前:479 mailto:sage [2012/02/08(水) 01:09:59.52 ID:???]
>>488
目的のスクリプトは書けたのですが、気持ち悪いので知ってるなら教えてもらえますか?


493 名前:nobodyさん mailto:sage [2012/02/08(水) 04:36:08.44 ID:???]
「教えてもらえますか?」

最近の若い奴は、物事の尋ね方も知らないのか?ブツクサブツクサ

494 名前:nobodyさん [2012/02/08(水) 07:53:34.31 ID:D9+63/xk]
<!-- link -->から<!-- /link -->までのタグ内に存在するURLとその行の「〜」で囲まれてる部分を
抜粋するようなプログラムを作成したいと思います。

例えば、次のような文章があった場合、
------------------------------------
ほげほげふがふが
example.com/hogehoge1
ほげほげふがふが
example.com/satitama1/saitama.html
<!-- link -->
リンク一覧
〜テスト〜 example.com/hogehoge2/test.hmtl
〜さいたま〜 example.com/satitama2
東京
<!-- /link -->
------------------------------------
結果は
------------------------------------
<a href="example.com/hogehoge2/test.hmtl">テスト</a>
<a href="example.com/satitama2">さいたま</a>
------------------------------------

のようにしたいのですが、どのように書いたらよいでしょうか?

尚、URLを抜き出す正規表現は次のように書きました。
(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)


環境は、CentOS5 perl5.10です

495 名前:nobodyさん mailto:sage [2012/02/08(水) 10:31:20.53 ID:???]
>>494
perldoc.jp/docs/perl/5.10.1/perlfaq6.pod#How32can32I32pull32out32lines32between32two32patterns32that32are32themselves32on32different32lines63

my $protocol = qr/(?:https?|ftp)/;
my $format = '<a href="%2$s">%1$s</a>' . "\n";
my $text = do { ... };
my @link;
while ($text =~ m{<!-- link -->(.*?)<!-- /link -->}gs) {
  my $links = $1;
  push @link, sprintf $format, $1, $2
    while $links =~ m{〜(.*?)〜.*?($protocol://[!#-;=?-\[\]_a-z~]+)}gos;
}
print @link;

496 名前:nobodyさん mailto:sage [2012/02/08(水) 12:09:45.01 ID:???]
>>493
その割には「お前ら教えろ」で回答貰えたりするけどな2ch

497 名前:nobodyさん mailto:sage [2012/02/08(水) 23:05:10.70 ID:???]
>>496
それはむしろネタとして受け入れられてしまうんだろうなw

498 名前:nobodyさん mailto:sage [2012/02/19(日) 12:41:02.48 ID:???]
私の働きが悪いせいか、私の物はほとんど買ってくれません。
下着は、妻と娘のお下がりです。
おまけに洋式トイレ、便座が上がってるとか、飛沫が飛んでるとか、いちいち五月蝿いんです。
おかげで、トイレは座ってするように強要され、もうブリーフの前、開ける必要が無いんだからと、私達のお下がりで十分でしょう。と、ここ何年も私の物は買ってくれません。
今では開き直って、ブラジャーもしています。
家に居る時は、娘のスカートを穿き、外出は娘のパンツ、ジーンズ穿いていきます。
娘は、始めは困惑していたが今では慣れ、何でも貸してくれます。
妻の洋服、パンツ、スカートはウエストがちょっときつい。
ストレッチの物は、勝手に着ています。

499 名前:nobodyさん mailto:sage [2012/02/19(日) 13:22:18.26 ID:???]
cat >>498 > /dev/null

500 名前:nobodyさん mailto:sage [2012/02/19(日) 15:19:47.97 ID:???]
next if $num == 498



501 名前:nobodyさん mailto:sage [2012/02/19(日) 17:53:14.70 ID:???]
Global symbol "$num" requires explicit package name at >>500 line 1.

502 名前:nobodyさん mailto:sage [2012/02/19(日) 22:33:36.65 ID:???]
どうせなら、>>498 は、そのカキコ内容を perl で記述すべし。

503 名前:nobodyさん mailto:sage [2012/02/20(月) 14:28:00.53 ID:???]
use warnings; use utf8; use Corp; use Family;
my $family = Family->new();
$family->husband('>>498'); $family->wife('百合子(仮)'); $family->daughter('楓(仮)');
my $corp = Corp->new(); $corp->salaryCalculation();
$family->income($family->husband(), $corp->salary());

if($family->income($family->husband()) > 250000){
  # トイレ
  my $toto = Toilet->new();
  $toto->type('EU'); # JA or EU
  my $urine = $family->urine($family->husband()); # 小便をする
  $toto->urine($urine);
  if($toto->is_splash()){ $toto->forced_to_sit(1); } # トイレの用足しには座りを強制
  # 下着
  if($toto->forced_to_sit()){ $family->underwear($family->husband(), $family->underwear($family->wife()); }
  # 他の着衣
  if($family->underwear($family->husband()) eq $family->underwear($family->wife())){
    $family->brassiere($family->husband(), $family->brassiere($family->wife());
    $family->skirt($family->husband(), $family->skirt($family->daughter());
    $family->jeans($family->husband(), $family->jeans($family->daughter());
  }
}else{
  $family->underwear($family->husband(), 'BOXER PANTS');
  $family->brassiere($family->husband(), undef);
  $family->skirt($family->husband(), undef);
  $family->jeans($family->husband(), 'EDWIN');
}

>>498 じゃないけど、これが限界っす><
娘や妻への下着のセットは省いたw

504 名前:nobodyさん mailto:sage [2012/02/20(月) 14:29:13.01 ID:???]
収入がちゃんとある場合の下着で、ブラとスカートはちゃんと undef にしてるところを評価して欲しいですw

505 名前:nobodyさん mailto:sage [2012/02/20(月) 22:20:39.95 ID:???]
わろた

506 名前:nobodyさん mailto:sage [2012/02/21(火) 10:11:33.62 ID:???]
修正
× $corp->salary()
○ $corp->salary($family->husband())

サラリーを得るのに名前を渡してなかった><


× if($family->income($family->husband()) > 250000){
○ if($family->income($family->husband()) < 250000){

不等号の向き間違えたw

507 名前:nobodyさん mailto:sage [2012/02/24(金) 16:30:51.95 ID:???]
初めまして。

RSSのデータから、日付時刻とタイトル、そのリンク先URLを一覧にして取得したいと考えています。

・ブラウザに「取得」ボタンなどを表示し、それをクリックすることで最新の一覧を表示
・以前に取得したものは取得しない

先ずは上記2点を実装したいです。

良い方法や参考サイトなどをご教示頂きたいです。
よろしくお願いいたします。

508 名前:nobodyさん mailto:sage [2012/02/24(金) 17:02:28.77 ID:???]
>>507
>>1-2

こんなCGI探してます 23
kohada.2ch.net/test/read.cgi/php/1219654359/
依頼されたツールを誰かが作るスレ
kohada.2ch.net/test/read.cgi/php/1078997682/
金出すからスクリプト作ってよvol.1
kohada.2ch.net/test/read.cgi/php/1150508106/
自作CGIを評価するスレ
kohada.2ch.net/test/read.cgi/php/1049514428/
自分の作ったCGIスクリプトをデバッグするスレ
kohada.2ch.net/test/read.cgi/php/1011174442/

kohada.2ch.net/test/read.cgi/php/1036141603/420-435

509 名前:nobodyさん mailto:sage [2012/02/24(金) 17:22:17.71 ID:???]
>>508
最後のスレが役に立ちそうです。ありがとうございます。

510 名前:nobodyさん mailto:sage [2012/02/25(土) 00:54:16.96 ID:???]
なぜマスコミは財務省の犬になるのか?

全国紙では唯一、増税批判の姿勢を取っていた産経新聞に、
昨夏、国税の税務調査が入った。
財務省にとって税務調査は言論統制の最強の武器で、
2009年には朝日、読売が申告漏れを指摘され、
それを機に朝日は増税礼賛へと傾斜し、
読売は財務省幹部の天下りを受け入れた経緯がある。

国税庁という「警察力」は、財務省の最強の武器なのです。
何しろ、徴税というのは「裁量範囲」が広い業務で、
調査官の「判断」により合法とされたり、
脱税とされたりしてしまうのです。
「去年はOKだったのに、今年は何でダメなんだ!」
といった事態は普通に起こります。




511 名前:nobodyさん mailto:sage [2012/02/25(土) 13:09:52.88 ID:???]
眞子様は素敵

まで読んだ

512 名前:nobodyさん mailto:sage [2012/02/27(月) 00:22:44.82 ID:???]
貞子は素敵

まで読んだ

513 名前:nobodyさん mailto:sage [2012/02/27(月) 00:26:08.69 ID:???]
素数

に見えた

514 名前:nobodyさん mailto:sage [2012/02/27(月) 00:46:41.84 ID:???]
素股

515 名前:nobodyさん mailto:sage [2012/02/27(月) 07:22:57.09 ID:???]
眞子様は素股!?

516 名前:nobodyさん mailto:sage [2012/02/27(月) 14:07:22.77 ID:???]
貞操は国家機密事項

517 名前:nobodyさん [2012/02/28(火) 00:06:11.43 ID:0AwG+yg0]
質問なのですがPerlでこういうサイトって作れますか?
ttp://findrjp.com/formen/
これはPHPだと思うんですけど
作るとしたらelsifで作る感じでしょうか?
こういうのってすぐ作れますか?

518 名前:nobodyさん mailto:sage [2012/02/28(火) 00:51:16.58 ID:???]
お前には無理

519 名前:nobodyさん mailto:sage [2012/02/28(火) 00:59:39.36 ID:???]
お前に出来たらチンパンジーでも出来るよ

520 名前:nobodyさん mailto:sage [2012/02/28(火) 01:10:42.34 ID:???]
そうだねelsifさえ使いこなせれば簡単に作れるよ。でもelsifはかなり難しいから頑張ってね。



521 名前:nobodyさん [2012/02/28(火) 01:35:37.84 ID:0AwG+yg0]
皆様生暖かいコメントありがとうございます。
どうせテメーらにはできないんだろwwwww
って挑発したらヒント教えてくれますか?
elsifは分かります

522 名前:nobodyさん mailto:sage [2012/02/28(火) 10:18:18.70 ID:???]
はいはいマルチマルチ。

523 名前:nobodyさん mailto:sage [2012/02/28(火) 14:34:14.89 ID:???]
実行中のスクリプトの場所に関して質問です。

スクリプト中で開くファイルはスクリプトのあるディレクトリのサブディレクトリに置いており、
全てフルパスで開くようにしています。
昨日初めて mod_perl を入れたところ、FindBin $Bin や Cwd が Apache のディレクトリになっています。

$ENV{'SCRIPT_FILENAME'} を使おうかと思ったのですが、デバッグでコンソールで実行することもあるため
$ENV{'SCRIPT_FILENAME'} は使えません。

$0 では cron でも mod_perl でも CGI でもコンソールでも期待する値が得られました。

./hoge.pl で実行して dirname($0) すると ./ 返ると書いてある場所もありますが、当方では
確認できませんでした。

そこで疑問に思ったのが、$0 を 100% 信用してもいいのか? ということです。
「他のプログラムにより強制的に書き換えられる」 という可能性は今は無しでお願いします。


524 名前:nobodyさん mailto:sage [2012/02/28(火) 14:46:37.42 ID:???]
ちょっと勘違いがありました。

$0 は perl に与えられた path みたいですね。
HTTPd とかはフルパスを作って渡してくれてるっぽいけど、
コンソールではそうではない。

むぅ。。。

525 名前:nobodyさん mailto:sage [2012/02/29(水) 01:59:02.18 ID:???]
mod_perl を導入してスクリプトが走るのが軽いからと F5 連打してたら
Not a CODE reference 〜
っていうエラーが出た。
そのエラーが言う行は

main();

としかやってないのに。。。

526 名前:nobodyさん mailto:sage [2012/02/29(水) 11:28:36.69 ID:???]
mod_perlが返すパスも元を追えば$0を元に生成してたと思う

527 名前:nobodyさん mailto:sage [2012/03/02(金) 13:17:08.38 ID:???]
すみません、Web制作板からこちらに飛ばされて来ました。

ユーザーによる新規会員登録後、そのユーザー毎にディレクトリを自動的に生成し、
ユーザディレクトリ毎に容量制限を割り当てたいのですが、可能なのでしょうか?

ディレクトリを自動生成するところまではできています。


528 名前:nobodyさん mailto:sage [2012/03/02(金) 18:09:30.62 ID:???]
ファイルが作成されようとする度に全ファイルサイズを得るか、
quota の導入。
quota を入れるなら、システムに実際にユーザーの作成が必要。

529 名前:nobodyさん mailto:sage [2012/03/03(土) 19:01:18.46 ID:???]
if ( 現在使用サイズ + これから書き出すサイズ < 制限サイズ ) {
 ファイル書き込み
 現在使用サイズを書いたファイルorDBを更新(現在使用サイズ+これから書き出すサイズ)
}

サイズ取得はuse bytes; $data_size = bytes::length($data); かな。

530 名前:nobodyさん mailto:sage [2012/03/03(土) 19:19:52.03 ID:???]
$^0って何でしたっけ。
検索しにくくて、、、、こういうのどうやって探せばいいんでしょう。
perlvarになかったので特殊変数ではないっぽい



531 名前:nobodyさん mailto:sage [2012/03/03(土) 19:27:25.41 ID:???]
何でしたっけと言われても、少なくともPerlにおいては特殊変数ではないしそれ以外の何かの意味もない。

532 名前:nobodyさん mailto:sage [2012/03/04(日) 02:19:05.56 ID:???]
$^O ならOS名なんだけどネ

533 名前:nobodyさん mailto:sage [2012/03/04(日) 12:49:16.62 ID:???]
>>532
そんなのすぐ気づいたしw

534 名前:530 mailto:sage [2012/03/04(日) 17:01:24.24 ID:???]
ありがとうございます、OS名でぐぐったらいろいろ出てきました。
ゼロじゃなくて大文字のオーだったんですね。

OS名ということはシステムからPerlに提供されているものだと思って、%ENVと同じところに記述されているはずって当たりをつけたら
perlvarにありました。

535 名前:nobodyさん mailto:sage [2012/03/04(日) 20:39:47.27 ID:???]
531恥ずかしすぎだなw

536 名前:532 mailto:sage [2012/03/05(月) 05:40:34.80 ID:???]
>>535
そんなことはない。$^0 は確かに特殊変数でもなんでもなかった訳だし。
ためしに$^0をプリントさせたらエラーで実行できなかったし。

537 名前:nobodyさん mailto:sage [2012/03/05(月) 22:13:10.43 ID:???]
だが普通すぐ気づくだろう。

538 名前:nobodyさん mailto:sage [2012/03/06(火) 01:30:36.74 ID:???]
「普通すぐ気づく」なら530の質問は最初からされてない

539 名前:nobodyさん mailto:sage [2012/03/06(火) 01:42:56.66 ID:???]
荒らしはスルーで、、、

540 名前:nobodyさん mailto:sage [2012/03/06(火) 02:52:11.60 ID:???]
>>538
なぜ?
$^O が検索しにくいのは同じだろう?



541 名前:nobodyさん mailto:sage [2012/03/06(火) 02:56:51.45 ID:???]
perlvarとは何だったのか

542 名前:nobodyさん [2012/03/06(火) 09:53:40.98 ID:zjKZlebn]
質問です、以下の最短マッチが機能しないっぽい? のですが、なぜでしょうか?

コード(抜粋)
$html =~ m!"(.*?)" class="Link88" href="/Models.aspx\?ModelID=$id"!s;
print $1;

実行結果
(〜ごっそり省略) <a title="Loeka Creekside Fern Short Sleeve Jersey 2010

$htmlはLWPで拾ってきたHTMLです。数MBくらいあります。
パターンマッチ内の文字列 class="Link88"〜 というあたりはちゃんとマッチしているようですが、
少なくとも Loeka の左にある " が $1 に含まれちゃうのはおかしい気がします。
また不思議なことに、修飾子 /s を外すとちゃんと最短でマッチしてくれます。

543 名前:nobodyさん mailto:sage [2012/03/06(火) 10:29:35.15 ID:???]
再現可能なコードぐらい貼れ、どーせこうだろうが
$html = q{<a href="b"
id="a" class="Link88"};
$html =~ m!"(.*?)" class="Link88"!s;
$html =~ m!"(.*?)" class="Link88"!;

最短ってのはマッチし始めてからが最短になるんであって、グループ内に"を含まないなんてルールはない
つまり最初の"から class="Link88" ... の手前の"までがマッチするんだよ

544 名前:nobodyさん mailto:sage [2012/03/06(火) 10:46:58.66 ID:???]
なるほど、左に向かって最短マッチはしてくれないんですね。
m!"(.*?)" class="Link88"!

m!"([^"]*?)" class="Link88"!
に変えて解決しました、ありがとうございます。

545 名前:nobodyさん mailto:sage [2012/03/06(火) 12:52:17.96 ID:???]
質問が不親切、再現しようにもコードもない、質問者が何を求めているかを把握するにはこっちが質問を熟読して意図と本当にやりたいことを汲み取らなければならない、などという書き込みに神対応できる >>543 みたいな奴尊敬するわ。

546 名前:nobodyさん mailto:sage [2012/03/07(水) 23:13:16.91 ID:???]
Kent Webさんからダウンロードしたpostmailの設置が上手くいかなくて困っています。

ttp://kueris.pro.tok2.com/postmail.html
↑これなんですが、ご覧の通り送信ボタンを押すとエラーが出てしまいます。
このエラーは、「Minimal.pm」がCGIフォルダ内に見つからない、という意味だと思うのですが、ちゃんとアップロードはできています。

以下、その他の詳細です。
・check.cgiは問題なく機能しました。パーミッションも設定できています。
・postmail.cgiのみを「cgi-bin」というフォルダに移動させました。
・サーバーはTOK2という所をお借りしています。
・エラーメッセージにある13行目辺りの内容はこんな感じです。↓

9 # モジュール実行
10 use strict;
11 use CGI::Carp qw(fatalsToBrowser);
12 use lib './home/kueris/postmail-utf/lib';
13 use CGI::Minimal;
14 use Jcode;

よろしければお力をお貸しください。よろしくお願いします。

547 名前:nobodyさん mailto:sage [2012/03/07(水) 23:45:53.60 ID:???]
use CGI::Minimal;
 ↓
use CGI;

またエラーが出たらお越し下さい。

548 名前:546 mailto:sage [2012/03/08(木) 00:14:54.72 ID:???]
>>547
ありがとうございます。お陰さまで、無事にそのエラーは解消されたです。

しかし、今度は別のエラーが発生しました。
ttp://kueris.pro.tok2.com/postmail.html
↑今はこのようになっています。
パスが違うのかと思い、色々変えてみましたが、効果はありませんでした。
メッセージにある20行辺りの内容は以下の通りです。↓

19 # 設定ファイル認識
20 require './public_html/postmail-utf/init.cgi';
21 my %cf = &init;

度々で申し訳ありません。
ですが、何卒よろしくお願いします。

549 名前:nobodyさん mailto:sage [2012/03/08(木) 09:26:25.31 ID:???]
require "./init.cgi";

で OK

550 名前:546 mailto:sage [2012/03/08(木) 12:15:53.18 ID:???]
>>549
ご回答ありがとうございます。
試してみましたが、相変わらず同様のエラーメッセージが表示されてしまいます。↓
ttp://kueris.pro.tok2.com/postmail.html
init.cgi自体はちゃんとアップロードされているんですが…。



551 名前:nobodyさん mailto:sage [2012/03/08(木) 12:34:33.65 ID:???]
init.cgiが@INCが示すディレクトリの中にあり、読める状態にあるかを確認

552 名前:nobodyさん mailto:sage [2012/03/08(木) 16:18:28.19 ID:??? BE:3622206896-PLT(12000)]
そもそもTOK2でCGIをまともに動かそうなんて無茶なこと考えるなよ

553 名前:nobodyさん mailto:sage [2012/03/08(木) 17:31:49.63 ID:???]
cwd でカレントディレクトリ表示させてみて

CGI で動いてない気がしてきた

554 名前:nobodyさん mailto:sage [2012/03/09(金) 01:25:41.39 ID:???]
初歩すぎる質問で申し訳ありません。
今勉強中なのですが、
postデータ等をこれで変換すると言うのが良くあるのですが、

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

たしかにこれでうまくいきますし、また基本的な挙動も理解しています。
分からないのは、なぜpack("C", hex($1))/egで、問題無く動くのかということです。
具体的には、
@$1で渡されるのは1バイト分なのに、なぜちゃんと2バイト文字として変換されるのか?
A%([a-fA-F0-9][a-fA-F0-9]の書式でなぜ半角文字が受け渡されるのか?
B例えば”テ”はpostからデータを受け取った時には83eなのに、なぜ問題無く変換されるのか?
C@にかぶりますが、なぜ(pack"c",***)で上手く動くのか? "c*"じゃないのに正常に動いてる。 また、$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/hex($1)/eg;で作った変数をそのままpack"c*",$value;としてもうまく動かないのに、なぜちゃんと動くのか?

いろいろ調べたりしたのですが、よくわかりませんでした。

555 名前:nobodyさん mailto:sage [2012/03/09(金) 02:06:50.72 ID:???]
>>554
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; でググれ。

556 名前:546 mailto:sage [2012/03/09(金) 02:23:40.92 ID:???]
皆様、ご回答いただき本当にありがとうございます。

>>551
確認しましたが、問題ありません。
init.cgiは確かに存在しているはずなのですが、認識されていないようです。

試しに、アップロードされたinit.cgiに直接アクセスしてみたところ、404エラーが表示されました。(つづりやパスは間違えておりません)
同じフォルダ内にある別のプログラムにはアクセスできるのですが……。

>>552
プロバイダによってCGIの設置しやすさは違うのてでしょうか?
もしよろしければ、CGIが動きやすい所をご紹介していただけないでしょうか。

>>553
申し訳ありません。プログラミングの経験がない私には、「cwdでカレントディレクトリ表示」の意味がよくわかりません。
調べてみましたところ、これはperlにおけるコマンドのことなのでしょうか。
打ち込んでみましたが、上手く動作しませんでした。

557 名前:nobodyさん mailto:sage [2012/03/09(金) 02:58:21.99 ID:???]
>>555
相当ぐぐったのですけど、「これで動く」「この処理はこう言う処理をしてる」と言う説明はありそれ自体はわかるのですが、
頭でイメージしたものだとどう考えてもエラーが起きるもしくは正しく動作しないはずなのに、「なぜこの書式で正しく動作してるのか?」と言う疑問の解決は見つかりませんでした。

558 名前:nobodyさん mailto:sage [2012/03/09(金) 03:20:04.43 ID:???]
>>554
Perlより文字コードの勉強を先にすべきだな
(1)〜(3)の疑問はそっち寄りだ

559 名前:nobodyさん mailto:sage [2012/03/09(金) 03:37:26.52 ID:???]
>>556
KENT から落としてきて、

13行目:use CGI;
24行目と26行目をコメントアウトでとりあえず動くよ。

何も入力せずに 「送信する」 ボタンを押せば、動作してるのが確認できる。
www11.tok2.com/home/mikisama/postmail-utf/postmail.html


ただし、これは貼らずにいられない。
Q.メールフォームを設置したいのですがsendmailは利用出来ますか?
tok2.com/study/faq/04-07.html

これ以上は スレチ (これ以上もクソも初めからスレチだが・・・) なので、改造スレの方へどうぞ。

560 名前:nobodyさん mailto:sage [2012/03/09(金) 03:45:25.88 ID:???]
文字で考えるな
ただ単なるバイト列として考えればよろし。

今日は SJIS だと 8DA193FA という4バイト。
俺らが見てる 「今」 という文字は、コンピュータからしたら 「8DA1」 という並びのバイト列でしか無い。
そうゆう並びになったから、文字が見えるというだけだ。



561 名前:nobodyさん mailto:sage [2012/03/09(金) 11:31:58.89 ID:???]
てst

562 名前:554 mailto:sage [2012/03/09(金) 13:02:31.68 ID:???]
説明が下手で申し訳ありません。

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;を3つに分解した場合、

例えば、”テストtestだよ”を下の形で出力すると

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/$1/g;

83e83X83gtest82BE82E6となります。これを$hexvalue = hex($value);に
いれようとしたのですが上手くいきません。

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/hex($1)/eg;として出力すると

131e131X131gtest130190130230となり、これをpack("c*",131,e,131,X,131,g,t,e,s,t,130,190,130.230);としても当然上手くいきません。
”test”部分は元々半角小文字なのでs/で式から弾かれてるからとわかったのですが、
カタカナ部分の2バイト目は半角英数混じりなのですがここをちゃんと変換してないようですしそう言うオプションも無いのに、なぜ上手くいくのだろう?とよくわかりません。
カタカナの2バイト目の変換はどこでどのように行っているのでしょうか?

>>554のCは、gで次々代入してるからそう言う事なんだろうか?となんとなくイメージ出来ましたが・・・・・

563 名前:nobodyさん mailto:sage [2012/03/09(金) 13:33:46.30 ID:???]
まず自己矛盾していることに気づいていない糞さ
>@$1で渡されるのは1バイト分なのに
>C@にかぶりますが、なぜ(pack"c",***)で上手く動くのか?
1バイト分のデータ(0x00-0xFF)をpackしてるんだからC*ではなくC

そして文字コードについて全く理解しようとしていない
「テ」の文字コードは「0x83 0x65」で、「e」の文字コードは「0x65」
だから「テ」をパーセントエンコードすると「%83e」であって
「%83」部分さえデコードすれば元の文字に戻るんだよ

ああ壁殴りてぇ

564 名前:nobodyさん mailto:sage [2012/03/09(金) 14:03:28.44 ID:???]
>>562
ポイントは3つ。
一つ目。
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; はURLデコードするための一文であるということ。
”テストtestだよ” をURLエンコードすると
”%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88”になる。(文字コードはUTF-8)
これをデコードして”テストtestだよ”に戻すのがURLデコード。
つまり$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;という一文の役目。

URLエンコードってのは、例えば「テ」(0xe38386)だったら「%E3%83%86」に変換する。
URLデコートってのは、例えば「%E3%83%86」だったら「テ」(0xe38386)に変換する。

2つ目
正規表現のパターンマッチは一つずつ行われる。
$value="%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88"
に対して
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
をやると、

$1に"E3"が入った状態でpack("C", hex($1))が実行され、文字列"%E3"を0xE3に置換。
$1に"83"が入った状態でpack("C", hex($1))が実行され、文字列"%83"を0x83に置換。
$1に"86"が入った状態でpack("C", hex($1))が実行され、文字列"%86"を0x86に置換。
(以下略)・・・

だからhexやpackにまとめて”%E3%83%86%E3%82%B9%E3%83%88test%E3%81%A0%E3%82%88”入れようとするのは間違い。

3つ目
>なぜ上手くいくのだろう?
多くのマルチバイトな文字コードは、「漢字は○○から始まる」とか「ひらがなは××から始まる」っていうルールを持ってる。
だから半角英数とマルチバイト文字が混在しても問題ない。

565 名前:nobodyさん mailto:sage [2012/03/09(金) 14:16:43.38 ID:???]
>>563
@とCはだいたいわかりました。ありがとうございます。

下の方は、pack("c*", 131,101);で”テ”になるのは理解しています。
ただhex($1の段階で131eと出力されてるみたいなので、普通に考えるとpack("c*", 131,c);と言う挙動をさせようとしてるように思えるのですが(当然これだと不具合が出ます)、特に修飾子があるわけでもないのになぜcを自動的に101に変換してるのかがわからないのです。

566 名前:nobodyさん mailto:sage [2012/03/09(金) 14:22:20.55 ID:???]
>>565
>特に修飾子があるわけでもないのになぜcを自動的に101に変換してるのかがわからないのです。
「e」な。
そんでもってeの文字コードは10進の101。

>普通に考えるとpack("c*", 131,c);と言う挙動をさせようとしてるように思えるのですが
なりません。
pack("C", 131)、pack("C", 101)が順番に動いている。

567 名前:nobodyさん mailto:sage [2012/03/09(金) 14:26:11.34 ID:???]
>>564
だいぶよくわかりました。本当にありがとうございます。
一文にする事で内部的に自動的にルールで振り分けてるから厳密に考えようとしてもしょうがないと言う事なのでしょうか。
とすると、あの一文を@%を抜くA10進数に変換B文字コードに変換三段階に分けて記述しようとすると逆に自動では行われないのでかなり膨大な記述になるのでしょうか。
わかりやすくしようと同じ挙動をするものをちょっと書いてみようと思ったら配列を使ったりしないとうまくいかない感じでした。

568 名前:nobodyさん mailto:sage [2012/03/09(金) 14:35:01.38 ID:???]
>>566
なるほど。
内部的にはeを101に自動的に変換して文字列を次々に処理してるのですね。
するとそこの部分だけを抜き出して分けて記述しようとすると、やはりeを101に変換させるコードを書かないといけないと言うことですね。

569 名前:nobodyさん mailto:sage [2012/03/09(金) 14:43:54.07 ID:???]
すみません ようやく理解しました。
0x83の次にcが来るので”テ”になる
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;の中ではeは未処理のまま0x83をpackで変換した物の後ろに単純にくっつけて出力したと言うことですね

ようやくわかりました。確かに文字コードの勉強が必要でした
よく調べてみます
大変お騒がせしました

570 名前:546 mailto:sage [2012/03/09(金) 16:47:52.35 ID:???]
>>559
ご回答ありがとうございます。
色々と見落としていた点があったようで、大変失礼致しました。
頂いた助言を元に、サーバーを変えて試してみます。
本当にありがとうございました。



571 名前:nobodyさん mailto:sage [2012/03/09(金) 21:37:28.29 ID:???]
つか use CGI しているのにモジュール使っていないし、
use strict してても全然 strict じゃないw
こんなの怖くて使えないよ('A`)

572 名前:nobodyさん mailto:sage [2012/03/10(土) 01:31:51.91 ID:???]
●やりたいこと:
 jpg画像のサムネイル作成(orファイルサイズ圧縮)がしたい。最悪トリミングでも


レンタルサーバ上でサムネイル画像を作成したいと思っております。
GDやImage Magick、Imager、epeg等々が入っていないのですが、
何かうまい方法がありましたら教えていただきたいと存じます。

配置してパスを通すだけで使えそうなモジュールがありましたら・・

573 名前:nobodyさん mailto:sage [2012/03/10(土) 02:30:16.63 ID:???]
まじめな話、KENT はやめとけ。
あれは20年前のシステムだ。

574 名前:nobodyさん mailto:sage [2012/03/10(土) 03:05:45.88 ID:???]
>>572
width height

575 名前:nobodyさん mailto:sage [2012/03/10(土) 05:37:43.25 ID:???]
>>574
主旨が画像を読み込むスピードを早くしたいので、widthheight指定だけではではちょっと・・

576 名前:nobodyさん mailto:sage [2012/03/10(土) 06:45:54.03 ID:???]
・画像を扱えるツール(プログラム)をレンサバにインストールする
 画像を扱うPerlモジュールは大抵別途本体(バイナリ)かライブラリも同時にインストールされてる必要があるからね
・画像加工できる別サーバを用意し、画像ファイルをそちらのサーバに投げてサムネイルを作ってもらい、それをダウンロードする

Image Magick じゃなくてImageMagick
でもImageMagickも入ってないレンサバって今時あるの? 画像ファイルを(たぶん大量に)アップロードできるくらいだから最安でカスカスのレンサバってことでもないと思うんだが

577 名前:nobodyさん mailto:sage [2012/03/10(土) 08:45:04.67 ID:???]
>>576
ありがとう。それらは考えたんだけど鯖分けるなら自分でサムネつくるのと
手間がかわらないのでなやんでる。

うん。ImageMagickはいってない。

578 名前:nobodyさん mailto:sage [2012/03/10(土) 10:20:44.99 ID:???]
ほかのレンタルサーバーに移動すればよい。

579 名前:nobodyさん mailto:sage [2012/03/10(土) 12:27:16.79 ID:???]
フリーなサーバならまだしも、金を払ってるレンタルサーバなら GD ぐらい入ってないの?
perl が駄目でも、PHP で GD が動いてる可能性とかは?

580 名前:nobodyさん mailto:sage [2012/03/10(土) 18:41:09.72 ID:???]
>>579
PHPでも組んでみたけどだめでした。

素直にさくらとかWebArenaSuiteX使うべきなんですが、
アプロダなのでちょっとアダルト要素入る可能性があり
ピンク系も許可のレンタル鯖でないとだめかなというのもネックになってます。



581 名前:nobodyさん mailto:sage [2012/03/11(日) 00:39:52.43 ID:???]
HTML解析で質問です。
HTML::TreeBuilderを使って解析をしているのですが、
どうしても

<span class="hogehoge">fuga</span>

の、fugaが取り出せません。

($tree->look_down('class', 'hogehoge')

ではダメなのでしょうか・・・?ご教授お願いしますm(_ _)m

582 名前:nobodyさん mailto:sage [2012/03/11(日) 09:53:46.90 ID:???]
>>581
同じクラスのエレメントが複数あるとか?

583 名前:nobodyさん mailto:sage [2012/03/23(金) 00:48:00.36 ID:???]
なかなか短いコードで再現できなくて申し訳ないのですが、

print "DEBUG1\n";
$html =~ m!<a title="([^"]*?)" class="Link88" href="/Models.aspx\?ModelID=$id" id="ModelLink\d+">.*?<td class="Label11">(.*?)</td>.*?<td class="Label14">(.*?)</td><td class="Label13".*? (\d+)%</td>!s;
print "DEBUG2\n";

このm//の1行だけの処理に、20秒ほどかかることがまれに起きます。
その間 top(1)で見てるとCPU負荷が異常に跳ね上がります。
この行はループ中、LWPで取得するたび$htmlが変わりながら数百回実行されるのですが、
異常に時間がかかる時以外は瞬時に通り過ぎます。

時間がかかる時の $htmlを試しにファイルに吐かせてみましたが、
サイズはせいぜい500KBほどで、
このときのファイルを上記の行だけのテストスクリプトに食わせても
瞬時に終了し異常が再現できません。

原因と対策に何か考えられることはあるでしょうか?

584 名前:nobodyさん mailto:sage [2012/03/23(金) 01:14:12.71 ID:???]
>>583
メモリスワップが発生してるとか。

585 名前:nobodyさん [2012/03/23(金) 04:21:38.62 ID:SsskDSLS]
質問です。
Perl/CGI側でHTTPのエラーコードを返そうと思います。

  #!/usr/bin/perl
  print "Status: 404 Not Found\n";

  exit;

というコードを書いたとき、ブラウザ上では想定通りに404エラーとして表示されるのですが
Apacheのエラーログを見てみると

  Premature end of script headers: /home/foo/htdocs/bar.cgi

とだけ表示されます。この時、他のエラーメッセージは見当たりません。
きちんと動いてはいるので問題ないと言えば問題ないのですが、これを出さないようにするにはどうしたら良いでしょうか。

・404エラーではなく、普通にウェブページを出力した場合には問題ありません。
・同じディレクトリでは別のCGIも問題なく動いており、パーミッションはそれらと同値に設定してあります。
・確認してみたところバージョンはApacheが1.3、Perlが5.8です。古い(´・ω・`)


586 名前:nobodyさん mailto:sage [2012/03/23(金) 04:35:43.93 ID:???]
たぶんcontent-typeを書くと消えるというかググれ

587 名前:nobodyさん [2012/03/23(金) 04:46:19.26 ID:SsskDSLS]
>>586
ありがとう。でもtext/htmlにしろtext/plainにしろ状況は変わらないんだ

588 名前:nobodyさん mailto:sage [2012/03/23(金) 04:58:11.94 ID:???]
>>585
exitって必要なの

589 名前:nobodyさん mailto:sage [2012/03/23(金) 05:11:05.01 ID:???]
\n\n

590 名前:nobodyさん mailto:sage [2012/03/23(金) 05:15:18.99 ID:???]
Header1: foo
Header2: bar
(空行)
body

仮にボディを空にするとしても、ヘッダとボディを隔てるものは必要ですよね



591 名前:nobodyさん [2012/03/23(金) 05:46:15.14 ID:SsskDSLS]
>>588
確かに585のような最小コードでは、exitは有っても無くても変わらないかも。

>>589-590
ステータスコードの末尾を\n\nにすると、
実際にページが送信されている(といっても改行1つだけだが)という扱いになるのか、
デフォルトの404ページが表示されずに、真っ白のページが表示されるようだ。

ちょっと面倒だけど、ブラウザ表示用にエラーページを用意して、
それを出力するようにすれば、とりあえず問題は無さそう。


.htaccessでErrorDocument指定されてるページに飛ばすには、自前でリダイレクトするしか無いのかなー?


592 名前:nobodyさん mailto:sage [2012/03/24(土) 01:12:43.26 ID:???]
>>591
普通exitなんて書かないよ?トホホにでも書いてあったのかな。


593 名前:nobodyさん mailto:sage [2012/03/24(土) 03:29:50.29 ID:???]
>>592
トホホは見てないけど、そうなんだ。
正常終了のときは使わない方がいいのかな。まあ、異常終了ならdie使うけど。

594 名前:nobodyさん mailto:sage [2012/03/24(土) 06:48:02.45 ID:???]
コードが最小だろうが最大だろうがそんなものは必要ない

595 名前:nobodyさん mailto:sage [2012/03/24(土) 08:52:21.86 ID:???]
何故exitが不要なのか、
いわゆる「省略の美学」以外に積極的な理由があったら、誰か教えて欲しい。

何らかの弊害(速度や安全性の問題など)があるとか、
別の関数等で置き換えるのが普通だとか、
構造化プログラミングにおけるgoto不要論と同じような理由だとか、ヒントでも構わないので。

596 名前:nobodyさん mailto:sage [2012/03/24(土) 09:25:36.37 ID:???]
そりゃなくても最後まで行けば仕舞いだけどexitは必ず書いてるな。

597 名前:nobodyさん mailto:sage [2012/03/24(土) 09:51:51.12 ID:???]
>>595
コンパイル済みのスクリプトをキャッシュして使い回すような環境で
無闇に exit すると良くないケースがある。
cast-a-spell.at.webry.info/200801/article_9.html
harapeko.asablo.jp/blog/2006/06/29/425898

反対に、書かなくていい場面で書いておくのが「冗長の美学」でしかないのなら、
__END__ なり #exit なりとしておいた方が無害でいい。

598 名前:nobodyさん mailto:sage [2012/03/24(土) 10:10:34.01 ID:???]
mod_perlとかplackみたいな永続化環境だとアクセスごとに走る部分でexitしたらだめじゃね
なんにせよこれ「いわゆる省略の美学」とは全く別問題

599 名前:nobodyさん mailto:sage [2012/03/24(土) 10:43:09.74 ID:???]
>>597-598
ありがとう。
mod_perlへの移植(と言ってもかなり書き換えることになりそうだ)を考えるなら、
最初からexitを使わないコーディングが重要ってことか。

mod_perlだと通常のexitは使わないほうがいいってのは聞いたことがあったんだけど、
実際にmod_perlは弄ったことがなくて、その感覚が掴めてなかった。


>>596-597
プログラムを1ファイルで済ませたい場合、
自分はメインルーチンソースファイルの先頭に、サブルーチンを最後にまとめて書くことが多いんだけど、
メインルーチンの最後に、以下はメインルーチンとしては実行されませんよと明言するためにexitを入れたりしてた。

600 名前:nobodyさん mailto:sage [2012/03/24(土) 11:58:06.99 ID:???]
俺も同じでソースの最初に main() なんだけど、その直前に exit() 書いてる。


use なんちゃら〜

our なんちゃら〜

main();

exit(0);

sub main{
}

sub func{
}


っていう感じ。



601 名前:nobodyさん mailto:sage [2012/03/24(土) 17:23:47.75 ID:???]
Cから入った人に多そう、とか思った

602 名前:nobodyさん mailto:sage [2012/03/25(日) 01:57:35.52 ID:???]
基本的に.pmにロジック書いて、.plはそれを呼ぶだけだからexitは滅多に使わないなあ。

603 名前:nobodyさん mailto:sage [2012/03/25(日) 15:34:18.54 ID:???]
1枚スクリプトで、&main; exit; は有りだと思う。
ただ基本は >>602 のようにするから滅多に使わない。


冗長の美学を語る人が、1枚に長いスクリプト書いてるのは矛盾を感じる。


604 名前:nobodyさん mailto:sage [2012/03/25(日) 18:03:11.28 ID:???]
>>603
そこはスクリプトの規模によるんじゃね?
短めの、他と共通化出来ないサブルーチンが2〜3個あるくらいなら、分けるまでも無いだろう。

605 名前:nobodyさん mailto:sage [2012/03/25(日) 19:02:45.23 ID:???]
それはそんなソースになってる時点で論外だな。

606 名前:nobodyさん mailto:sage [2012/03/25(日) 19:14:00.38 ID:???]
別に嫌みとかでは無いんだけど、>>605 の数百行ぐらいの小さいソースと、
2〜3000行ぐらいの中規模のソースを見てみたい。

ってのも、俺の殆どのソースは1枚で済ましてるから、他人ので学習というか知識を深めてみたいから。


607 名前:nobodyさん mailto:sage [2012/03/25(日) 20:04:16.17 ID:???]
605は安価がないからなー、自分が思ってるのと全く違う主張の可能性もあるw

608 名前:603 mailto:sage [2012/03/26(月) 02:46:50.44 ID:???]
>>606
>>605 とは別人なんだが、数百行の小さいソースって、1プロジェクトで数百行ってことかな。
1ファイルで4,5百行くらいって話だとちょっと長いかな。
スクリプトファイルを書くにしても、大体いろいろな機能をクラス(pmファイル)に分けてそいつらの責任に任せたほうがメンテが楽。








609 名前:nobodyさん mailto:sage [2012/03/26(月) 14:06:22.42 ID:???]
>>608
それはモダンなやり方ですか?

610 名前:nobodyさん mailto:sage [2012/03/27(火) 01:13:45.03 ID:???]
え、モダンかぁ、、、、悪い書き方はしちゃダメだけど、モダンとかは気にしないほうがいいと思うよ、、、
流行り廃りだし、自分で判断したほうがいいよ




611 名前:nobody mailto:sage [2012/03/30(金) 00:02:30.52 ID:???]
そうだね。モダンは足が速いから。スレッドももうなくなったしね。

612 名前:nobodyさん mailto:sage [2012/03/30(金) 00:16:05.99 ID:???]
【モダン推奨】Perlについての質問箱 50箱目
toro.2ch.net/test/read.cgi/tech/1327110999/

613 名前:nobody mailto:sage [2012/03/30(金) 00:29:41.87 ID:???]
初心者には敷居が高いから万人向けってわけじゃない

614 名前:nobodyさん mailto:sage [2012/04/03(火) 10:03:29.27 ID:???]
こちらはcatalystについての質問でもよろしいでしょうか?
catalystのスレはあるものの、人が居なさそうなので。。

catalystとApacheをつなぐために、
perl-Catalyst-Engine-Apache-1.12-1.el5.rf.noarch.rpm
を入れようとしているのですが、依存関係で以下の物が足りないと落ちます。
---> Package perl-Catalyst-Engine-Apache.noarch 0:1.12-1.el5.rf set to be updated
--> Processing Dependency: perl(Apache::RequestRec) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::Response) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::Const) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache2) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::RequestIO) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::URI) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::Connection) for package: perl-Catalyst-Engine-Apache
--> Processing Dependency: perl(Apache::RequestUtil) for package: perl-Catalyst-Engine-Apache

いろいろ探すと、mod_perlの旧バージョン(1.9.9)には含まれていたものの最新バージョン(2.0.5)には含まれて居ないモジュールのようです。

対応方法が分かる方、ご教授いただけますでしょうか。
宜しくお願いいたします。


615 名前:nobodyさん mailto:sage [2012/04/03(火) 11:11:13.68 ID:???]
>>614
人がいなくてもそれがそのスレなんだからそこに書くしかないんじゃ?
人が少ないからで別スレきたら何でもアリになるだろ

616 名前:613 mailto:sage [2012/04/03(火) 16:39:22.06 ID:???]
自己解決しました
Catalyst::Engine::Apache2
なるものがcpanから出てました
ちょうど過渡期のようですね


617 名前:nobodyさん mailto:sage [2012/04/04(水) 00:34:44.70 ID:???]
過渡ちゃんペッ

618 名前:nobodyさん mailto:sage [2012/04/04(水) 18:53:47.59 ID:???]
CGIゲーム改造してるんだけど

ID<>名前<>パスワード<>データ各種・・・

みたいに記録してあって下のように処理しててこれが何か所も出てくる
扱うデータ増やすたびに全て修正しなくちゃいけなくてやたら面倒くさい
配列だと見た目で何の変数かわかりにくいし連想配列はつなぐときの順番がばらばらだし
どちらも読み取りだけの時使わない変数まで格納するの無駄かなあと考えてたら先に進まなくなってしまった
変数の追加とか挿入とかするとき一か所くらいの修正でいい無駄の少ない方法ない?

for($i=0;$i<$num;$i++){
   ($id[$i],$name[$i],$pass[$i],...) = split (/<>/, $data[$i]);
   ↓
   処理
   ↓
   $newdata[$i] = "$id[$i]<>$name[$i]<>$pass[$i]<>...";
}


619 名前:nobodyさん mailto:sage [2012/04/04(水) 20:03:38.87 ID:???]
>何か所も出てくる
subにぶち込んどきゃいいだろ

620 名前:nobodyさん mailto:sage [2012/04/04(水) 21:27:07.37 ID:???]
そんなあなたにはスライス



621 名前:nobodyさん mailto:sage [2012/04/04(水) 22:59:22.68 ID:???]
スライスって数字のやつ?何か挿入して増やそうとするとずれるよね
単純に後ろに追加すると位置的にわかりにくいから挿入したいんだが、数字のチェックもしなくていい方法ない?
元のデータの書き換えは再生成するから考えないとして


データ0<>データ1<>データ2<>・・・

データ0<>データ1<>データx<>データ2<>・・・

それとサブルーチンだとどうやって引き渡そうか悩んでる
配列だと結局受け取るときに順番が大事だし連想配列だと上書きする時また<>で連結しにくいと思ったんだが

622 名前:nobodyさん mailto:sage [2012/04/04(水) 23:25:45.28 ID:???]
順番付き連想配列使えば良いじゃんw

623 名前:nobodyさん mailto:sage [2012/04/05(木) 00:00:05.98 ID:???]
データファイルにはヘッダを必ず含めれば幸せになれるかも。

スライスは苦手なのでサンプルは今書けないけど、ファイルを全て読み込んだ時のイメージはこんな感じ。

my $data = {};
$data->{'headers'} = [〜];
$data->{'data'} = [
 {○=>△,◇=>□},
 {○=>△,◇=>□},
  〜以下略〜
];

読み書きは @{$data->{'headers'}} の順番で行えば良い

で、読み書きを行うサブルーチンを作れば良い。


CSV 的なデータを連想配列で読み込むモジュールがあった気がする。


624 名前:nobodyさん mailto:sage [2012/04/05(木) 00:25:31.57 ID:???]
だから順番付き連想配列使えって。
なんで無理して難しい方法で実現しようとするの?

625 名前:nobodyさん mailto:sage [2012/04/05(木) 06:21:58.63 ID:???]
>>624
例えばこうやるんだよ、って簡単なサンプルコードを書いてやるといいよ。

626 名前:nobodyさん mailto:sage [2012/04/05(木) 09:51:23.36 ID:???]
>>618
ちょっと書いてみた。
www5.puny.jp/uploader/download/1333586646.zip
pass: perl

順番付き連想配列ってこうでいいのかな?
添削歓迎。


627 名前:626 mailto:sage [2012/04/05(木) 10:42:38.78 ID:???]
id とかって配列なのか。
ぱっと見 $i いらなそうなので無視してましたよ。
要件満たしてないっぽいので忘れてください。

628 名前:nobodyさん mailto:sage [2012/04/05(木) 13:04:38.74 ID:???]
www5.puny.jp/uploader/download/1333598575.pl
pass:perl
自分はこう書いた

629 名前:nobodyさん mailto:sage [2012/04/05(木) 15:56:41.39 ID:???]
>>628 それだったら $data = [array_ref, hash_ref, ...] の方が良くないですか?

my $data = readdata_mod();
my $headers = shift @$data;

for my $hash (@$data){
 $hash->{NAME} .= '【逮捕】';
 print "$hash->{$_}\n" for @$headers;
}

sub readdata_mod{
 my $headers = <DATA>;
 chomp $headers;
 $headers = [split(/<>/, $headers)];

 my $data = [$headers];

 while(my $line = <DATA>){
  chomp $line;
  my %tempdata = ();
  @tempdata{@$headers} = split(/<>/, $line);
  push @{$data}, \%tempdata;
 }
 return $data;
}

それより気になるのは >>618 のソースだと
@id,@name,@pass... と配列があるんですよね。
これをどう処理してるか謎なんで
レコードをなめるだけでいいのか悩むところ。

630 名前:nobodyさん mailto:sage [2012/04/05(木) 16:34:07.79 ID:???]
そこは好みかな
自分はデータとヘッダは分離させたいので、ああやって書きました。




631 名前:nobodyさん [2012/04/06(金) 11:04:06.62 ID:AWfq6sbZ]
すいません。perlをコマンドラインで使うやり方について質問させて下さい。
例えば数字の入ったファイル名だけ全部lsしたい時って
どのように書けばいいのでしょうか。
こんな風に書いてみたんですが何も出力されません…
ls | perl -e "print /[0-9]/ "


632 名前:nobodyさん [2012/04/06(金) 11:29:12.54 ID:AWfq6sbZ]

find . -maxdepth 1 -name '*.gif' | perl -ne 'print if /\/*[0-9]{2}\.gif$/;'
こんな感じで出来ました

633 名前:nobodyさん mailto:sage [2012/04/07(土) 02:00:48.78 ID:???]
>>632
find . -maxdepth 1 -name "*[0-9][0-9].gif"

634 名前:nobodyさん mailto:sage [2012/04/07(土) 02:02:53.93 ID:???]
>>632
> if /\/*[0-9]{2}\.gif$/;
これはワイルドカードと正規表現をごっちゃにしているな。別物だからちゃんと区別するように。

635 名前:nobodyさん mailto:sage [2012/04/07(土) 04:29:33.70 ID:???]
それって
find . -maxdepth 1 -name "[0-9][0-9].gif"
と等価なだけなんじゃないのか

636 名前:nobodyさん mailto:sage [2012/04/07(土) 09:58:11.44 ID:???]
以下のコードで,https://member.livedoor.com/login/ が
取得できません.

use WWW::Mechanize;
my $mech = new WWW::Mechanize( autocheck => 1 );
my $url="https://member.livedoor.com/login/";
#my $url="https://www.nodeworks.com";
$mech->get($url);
print $mech->content;


$url を https://www.nodeworks.com とした場合は,取得できます.
https://member.livedoor.com/login/ が取得できない原因として,
何を疑ったらいいでしょうか??

637 名前:nobodyさん mailto:sage [2012/04/07(土) 11:49:34.04 ID:???]
USER AGENT がちゃんと設定されてないだけでしょ

638 名前:nobodyさん mailto:sage [2012/04/07(土) 12:32:23.46 ID:???]
HTTP::Cookies

639 名前:nobodyさん mailto:sage [2012/04/07(土) 19:43:25.79 ID:???]
マジレスするとSSLを使用しているページにはCrypt-SSLeayを入れないと繋げない事もある

640 名前:nobodyさん mailto:sage [2012/04/07(土) 21:04:03.67 ID:???]
あくてぃぶ とか すとろべりー ならインストール後には可能やよ
Linux 標準の ぱーる は おーぷんえすえすえる 入れないとだめですわ シャキーン



641 名前:nobodyさん mailto:sage [2012/04/08(日) 11:30:20.98 ID:???]
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
を追加すると繋げることもある

642 名前:636 mailto:sage [2012/04/08(日) 21:41:15.55 ID:???]
>>641

https:://gitub.com は,
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
でいけた.

しかし,https://member.livedoor.com/login/ は,それでもいけない.
https://member.livedoor.com/login/ は,特殊なんかな.

643 名前:nobodyさん mailto:sage [2012/04/14(土) 20:30:27.28 ID:???]
「かんたんプログラミングCGI/Perl」ってこのスレ的にはどうでしょう?
ttp://d.hatena.ne.jp/perlcodesample/20120414/1334359182

この人のブログ、>>2のテンプレに載ってないから心配になって聞いてみました。

644 名前:nobodyさん mailto:sage [2012/04/14(土) 20:38:40.49 ID:???]
ソースコードに誤字山積ってだけで論外だろ。

そのブログ自体は数年前から、2ch に宣伝気味に貼られるけど
あんま相手にされてない



645 名前:nobodyさん mailto:sage [2012/04/14(土) 20:45:44.78 ID:???]
>>644の言う通り。その本もブログも絶対に参考にしちゃだめ。
現代的()なPerlなんて覚えてもろくなことにならないから
5.6でも動くようなコーディングを心がけるべし。
あとこいつがプッシュしてるMojoliciousも、ちょっと有名なCatalystとかも
やめといた方がいい。
フレームワークなんてすぐ腐る。
CGIが一番。

646 名前:nobodyさん mailto:sage [2012/04/14(土) 21:04:47.55 ID:???]
フレームワークは小さなやりたいことに対して規模がデカすぎ

647 名前:nobodyさん mailto:sage [2012/04/14(土) 21:09:27.25 ID:???]
10年以内に発売されたような高性能PCとかじゃないとすぐメモリを食いつぶされるからな>フレームワーク。
フレームワークは金持ちのお坊ちゃまの娯楽、甘えでしかない。
技術を自分のモノにしたければCGIで泥臭く書け。

648 名前:nobodyさん mailto:sage [2012/04/14(土) 21:45:18.04 ID:???]
フレームワークごときでメモリが食いつぶされるような
貧弱なマシンで使ってるの?

それ選択が間違いなだけだよ。

ユーザー数、数万、数十万のウェブサービスを作っていれば、
必然と複数台構成のマシンになる。
メモリの話だと1台10GBオーバーとか当たり前。

そういう世界の人に対して高性能PCとか、メモリ容量とか
釈迦に説法ってやつだと思わないか?

649 名前:nobodyさん mailto:sage [2012/04/15(日) 11:24:37.83 ID:???]
はいはい、Mojoと喪男でがんばってね!

650 名前:nobodyさん mailto:sage [2012/04/15(日) 11:27:08.04 ID:???]
とにかくCGIで書くことを心がければ小規模から大規模までどんなアプリだって書けるようになる。
フレームワークは覚せい剤。手を出したら終わり。



651 名前:nobodyさん mailto:sage [2012/04/15(日) 11:52:49.40 ID:???]
まあおれの場合、CGI.pmすら嫌なんでHTML直に書いてるけどね
その方が書きやすいしメンテもしやすいと思ってる
初期の頃からそうしてるけどぶれていないね

652 名前:nobodyさん mailto:sage [2012/04/15(日) 11:58:08.00 ID:???]
いいねぇ。素晴らしい。
楽はしちゃだめだよね。

653 名前:nobodyさん mailto:sage [2012/04/15(日) 13:46:50.99 ID:???]
モジュール作成者の世界観とおれが直面している問題とは無関係だから。
モジュールのメソッドの整理具合が、個別の問題にマッチしていないのは
当然あり得ること。
個別の問題を解決するのを車輪の再発明だとは思わない(キリッ

654 名前:nobodyさん mailto:sage [2012/04/15(日) 14:12:09.38 ID:???]
>>653
そういう場合はラッパーを作ればいい。


655 名前:nobodyさん mailto:sage [2012/04/15(日) 14:12:40.71 ID:???]
プロとアマチュアの違いを見た

656 名前:nobodyさん mailto:sage [2012/04/15(日) 15:17:25.01 ID:???]
なんだかんだで、ちょっと機能を足しただけのラップモジュールを作る機会って少なくないね。

自分が今のやってるロジェクトだとHTML::Template系使ってるけど、
共通パラメータやらフィルタやら、細かい部分が多くてなあ。

657 名前:nobodyさん mailto:sage [2012/04/16(月) 00:50:12.93 ID:???]
ラッパーを作るってことは元のものより粗いものしか作れないでしょ

658 名前:nobodyさん mailto:sage [2012/04/16(月) 02:30:46.51 ID:???]
>>643
ブログの中で自分の名前間違えてたりするレベルなので、本のほうも
推して知るべし、です。

659 名前:nobodyさん mailto:sage [2012/04/16(月) 09:27:44.08 ID:???]
もちろん、こいつの雑誌連載も糞。
上手になりたかったらもっと2chを活用しろ。
オライリーと2chだけで十分。

660 名前:nobodyさん mailto:sage [2012/04/17(火) 05:05:18.23 ID:???]
ある入門書にこう書いてありました
「関数とは、特定のまとまった処理を実行する機能のことです。
・・・一般的に、プログラムの中で呼び出される際にデータを受け取って
特定の処理を行い、結果を返す働きをします」

演算子もこの説明における関数と働きは似ているように見えます
例えば加算演算子が 2 つの数を受け取って和の値を返すというように

関数と演算子に大きな違いがあるのでしょうか?
なんで「関数」と「演算子」とわざわざ呼び分けているわけですか?



661 名前:nobodyさん mailto:sage [2012/04/17(火) 12:31:41.99 ID:???]
その入門書の信頼性を疑ってみる。

662 名前:nobodyさん mailto:sage [2012/04/17(火) 12:31:59.01 ID:???]
>>660
違いは無い。引数の取り方が違うだけ。

663 名前:nobodyさん mailto:sage [2012/04/17(火) 12:35:26.61 ID:???]
入門書なんか捨てろ
Googleも使うな
2chで全て解決






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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