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

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

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

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

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

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1203935151/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
2nobodyさん:2008/08/06(水) 22:56:09 ID:???
ム板Perlスレより 1 of 2

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

[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/

[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
3nobodyさん:2008/08/06(水) 22:56:31 ID:???
4nobodyさん:2008/08/07(木) 00:19:06 ID:???
say >>1 '乙';
5nobodyさん:2008/08/07(木) 07:15:27 ID:1CE8PFPT
Webページを取得するため、LWP::UserAgentを使用したのですが、
ある特定のページでは途中で切れてしまいます。

データサイズも大きくないのに、
なぜ途中で止まってしまうのかがわかりません。。

#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::UserAgent;

my $url = 'http://human7.2ch.net/wmotenai/subback.html';
my $browser = LWP::UserAgent->new;
my $resp = $browser->get($url, 'User-Agent' => 'test');

print $resp->content;
6nobodyさん:2008/08/07(木) 11:10:29 ID:qpI1q2Ei
http://www.rescue.ne.jp/cgi/htpasswd/makepwd-des/
このような暗号化するサイトをつくりたいです。
暗号化に使用するスクリプトは知り合いに作ってもらいました
sub enc_string{
my ($key, $string) = @_;
my @map = (('A' ... 'Z'), ('a' ... 'z'), ('0' ... '9'), '+', '&');
my @key = unpack('C*', $key);
my $str = '';
my @x = map { int(rand(200)) } (0 ... 2);
@key = map {$x[$_] ^ $key[$_]} (0 ... 2);
while($string ne ''){
my $n = substr($string, 0, 3, '');
my @n = unpack('C3', $n);
map{$n[$_] ^= ($key[$_])} (0 ... 2);
@key = unpack('C3', $n);
@key = map {$x[$_] ^ $key[$_]} (0 ... 2);
my $a = $n[0] >> 2;
my $b = (($n[0] & 3) << 4) | ($n[1] >> 4);
my $c = (($n[1] & 15) << 2) | ($n[2] >> 6);
my $d = $n[2] & 63;
$str .= $map[$a] . $map[$b] . $map[$c] . $map[$d];
}
my $a = $x[0] >> 2;
my $b = (($x[0] & 3) << 4) | ($x[1] >> 4);
my $c = (($x[1] & 15) << 2) | ($x[2] >> 6);
my $d = $x[2] & 63;
return $str.'<>'.$map[$a].$map[$b].$map[$c].$map[$d];
}

これをcgiとして上記のサイトのように出力するようにするにはどうすればいいでしょうか?
7nobodyさん:2008/08/07(木) 11:45:30 ID:???
$aとか$bはsortで使うから使わないほうが良いよ。
8nobodyさん:2008/08/07(木) 12:07:07 ID:???
>>7
知り合いに作ってもらったのですが、触り方がわかりません。
同じ出力でできるのでしたら教えてください
9nobodyさん:2008/08/07(木) 12:17:13 ID:???
知り合いに作ってもらえばいいだろw
10nobodyさん:2008/08/07(木) 12:19:33 ID:???
いや今海外に居て連絡がつかないんです
なのでこちらでお願いしているんです
11nobodyさん:2008/08/07(木) 12:23:08 ID:???
しらんがな
12nobodyさん:2008/08/07(木) 12:31:41 ID:???
さすがに変数を変更出来ないのは初心者以前の問題じゃんw
最低限の知識ぐらいは身につけてから来た方がいい。
13nobodyさん:2008/08/07(木) 12:36:34 ID:???
>>12
復号等は諦めますので、暗号化だけはしたいんです
初心者以前なのは承知の上で今回だけお願いします
14nobodyさん:2008/08/07(木) 12:49:13 ID:???
>>13
それに合ったスレがあるでしょう。
15nobodyさん:2008/08/07(木) 13:00:58 ID:???
>>14
すみません、誘導お願いします
16nobodyさん:2008/08/07(木) 13:03:10 ID:???
お断りします。
17nobodyさん:2008/08/07(木) 13:17:02 ID:???
>>15
今度だけだよ。次からは自分で探してね。

# アドバイスが欲しい場合:
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/

# 誰かにやってもらいたい場合:
【 スクリプト改造依頼スレ 】(丸投げ) part7
http://pc11.2ch.net/test/read.cgi/php/1216419170/
18nobodyさん:2008/08/07(木) 13:37:45 ID:???
>>17
本当にすみません、ご迷惑おかけしました
19nobodyさん:2008/08/07(木) 14:03:46 ID:???
>>5
$resp->is_successと$resp->status_lineを確認してみれ。
20nobodyさん:2008/08/07(木) 16:26:22 ID:???
Template Toolkitで、HTMLを書くときに、セレクトメニューやラジオボタンの
初期値を設定するにはどうすればいいのでしょうか。
CGI.pmでセレクトメニューを作ったときのようにdefault値を指定できる仕組みがあると便利なのですが。
現状では一つ一つにifで

<select name="test">
<option value="test_1" [% IF test_1 %]selected="selected"[% END %]>test1<option>
<option value="test_2" [% IF test_2 %]selected="selected"[% END %]>test2<option>
<option value="test_3" [% IF test_3 %]selected="selected"[% END %]>test3<option>
</select>

こんな感じでやってるのですが、他に効率のいい方法があったら教えてください。
21nobodyさん:2008/08/07(木) 16:55:07 ID:???
>>5
っ[LWP::Debug*]
22nobodyさん:2008/08/07(木) 16:57:22 ID:???
>>20 HTML::FillInFormを通すとかダメ
23nobodyさん:2008/08/07(木) 18:43:16 ID:???
>>20
selectする要素がDBに入ってるから、
ループでまわして、同じ値だったらselectedするようにしてる。
24nobodyさん:2008/08/07(木) 21:07:08 ID:???
[% USE FillInForm %]
[% FILTER fillinform fdat => stash %]
<select name="test">
<option value="test_1">test1<option>
<option value="test_2">test2<option>
<option value="test_3">test3<option>
</select>
[% END %]
255:2008/08/07(木) 21:41:11 ID:1CE8PFPT
不思議〜!

print "content=" . $resp->content . "\n"; #これだとHTML全部表示される
#print $resp->content; #これだと途中で止まる

ちなみに、
>>19
is_success=1
status_lilne=200 OK
でした。(^^

>>21
出力結果がよくわからず。。まだまだ勉強が足りないようです。。
26nobodyさん:2008/08/07(木) 22:25:18 ID:???
バッファリングかよ。どういう出力先のどういう問題だ?
27nobodyさん:2008/08/08(金) 02:06:15 ID:???
my $c = 9250; #JISコードの"あ"
print Jcode->new(chr $c,"jis")->utf8,"\n";
print Jcode->new("あ","jis")->utf8, "\n";

異なる結果が表示されるのですが、同じ結果はどうすれば得られますか。
28nobodyさん:2008/08/08(金) 02:32:39 ID:???
JISの 'あ' は10進9250じゃなさそうな気がする
29nobodyさん:2008/08/08(金) 02:35:43 ID:???
ごめんなさい。>>28撤回。
30nobodyさん:2008/08/08(金) 02:36:27 ID:???
chr が返すのは Ascii だから、そこの時点で終わってる
3120:2008/08/08(金) 11:08:08 ID:???
>>22
こんなものがあったのですね。とても便利そうなので使ってみます。
>>23
ふむふむ
>>24
具体的な使い方ありがとうございます!

みなさんどうもありがとうございました。
32nobodyさん:2008/08/08(金) 16:57:50 ID:???
>>27
use Jcode;

my $c = 9250; #JISコードの"あ"
print Jcode->new(pack('A3n', "\e\$B", $c), "jis")->utf8, "\n";
print Jcode->new('あ',"jis")->utf8, "\n";


# ぶっちゃけJISではencoding使わないとスクリプトなんて書いてられないんだが、
# 言及してないところを見ると、後釣りなんだろうか。
33nobodyさん:2008/08/08(金) 17:45:59 ID:???
'あiう' が5バイト程で済みそうな感覚のまま気軽に試しただけじゃないかな。
本気でエスケープシーケンスにまみれてたら元質問が出てこない。
34nobodyさん:2008/08/08(金) 18:32:27 ID:???
>>32
ありがとう。助かりました。
355:2008/08/08(金) 23:12:59 ID:6d/Auy3a
>>26
Windows Vista 、Active Perl v5.6.1、コマンドプロンプト
でHTMLをGETしてprint出力させたところ、下記結果になりますた。。
print $hoge ; #一定サイズで止まる
print "Content=" . $hoge ; #全部出力される
36nobodyさん:2008/08/10(日) 01:25:04 ID:???
>>35
うーん、再現しないなあ。ページは >>5 のソースのアレでいいんだよね?
他に再現するページはあります?
37nobodyさん:2008/08/10(日) 08:17:20 ID:???
>>35
Perl 5.8.8 on Linux
Perl 5.8.8 on WinXP

にて再現しませんでした。
3835=5:2008/08/10(日) 12:35:43 ID:FnBuPKsd
2chのレス900くらいのスレッドを読み込んでも、途中で止まります。

↓こんな感じ
c:\Perl>gethtml03.pl
 〜省略〜
は意識してないんですが、これで(野村
c:\Perl>

下記のようにファイル出力させると正常に</html>まで書き込んでいました。
open(OUT, ">gethtml.txt");
print OUT $resp->content ;
close(OUT);

Perlの問題ではなくて、コマンドプロンプトが勝手にセッションを切ってしまうのかもしれません。。
39nobodyさん:2008/08/10(日) 13:54:06 ID:e4jqjZel
WinのActivePerlにて一行目に
#!C/:perl/bin/perl
として指定していますがこれをを
#!usr/bin/perl
で動かしたいのですが良い方法はありますか?
40nobodyさん:2008/08/10(日) 14:25:28 ID:???
>>39
試してからもう一度聞きに来てくださいな。
あ、あたち、……待ってゆかやぁ!

# ちなみにそれ、どっちもたぶん間違っているけれど釣りなのか typo なのか。
41nobodyさん:2008/08/10(日) 15:25:56 ID:???
どっちもアレだねw
まあ、何も書いてなくても動くけど。
4236:2008/08/11(月) 21:00:27 ID:???
>>38
何度やっても、ぴったり再現するようなら、以下の原因が考えられます。

- Windows Vista 搭載 cmd.exe(?) の新機能
- Windows Vista の新機能
- Perl もしくは Module のバージョンが古臭い

当方は以下の環境で相変わらず再現せず:
Perl 5.10.0, (nyacus.exe|cmd.exe|command.com), Windows XP Professional SP2
43nobodyさん:2008/08/13(水) 12:07:37 ID:???
置換で後方参照を変数展開したいのですが
どのように記述すればいいでしょうか?

$str = 'XXX,YYY';
$aa = $ARGV[0]; # (.+),(.+)
$bb = $ARGV[1]; # $2-$1
$str =~ s/$aa/$bb/; # YYY-XXX になるようにしたい

44nobodyさん:2008/08/13(水) 12:41:40 ID:???
eオプションとか使えば?
ただ$1-$2は"で囲わないと、変数展開しないと思う。
45nobodyさん:2008/08/13(水) 23:35:35 ID:???
eオプション付けても
そのまま $1-$2 に置換されます。
できないのでしょうか。
46nobodyさん:2008/08/13(水) 23:51:09 ID:???
>>45
一個じゃパワーが足りないんじゃね?
47nobodyさん:2008/08/14(木) 04:07:34 ID:???
e二つなら、"も二重にする必要がある。
忘れずに。
48nobodyさん:2008/08/14(木) 09:24:20 ID:???
変数展開二重にする必要があるから、明示的にeを使用する。それも2回。
eを使わなくても変数展開するが、その場合は一度しかしない。
$2-$1だと引き算が行われるので、"で囲って変数展開が行われるようにする。
49nobodyさん:2008/08/14(木) 15:40:50 ID:???
ありがとうございました。

最終的にこうしました。

$str = 'XXX,YYY';
$aa = $ARGV[0]; # (.+),(.+)
$bb = $ARGV[1]; # $2-$1
$bb = "\"".$bb."\"" if($bb =~ /[\$]\d/);
$str =~ s/$aa/$bb/ee; # YYY-XXX になるようにしたい
50nobodyさん:2008/08/16(土) 16:45:37 ID:oiXxzTPY
.qmailからパイプにて呼び出すプログラムで
MIME::Parserを使用してメールを処理したいのですが
my $parser = MIME::Parser->new();
$parser->parse(\*STDIN);
のparseを呼び出した時点で処理がとまってしまいました。
無限ループではまったかのようにとまっています。
falseも返ってきません。

ネットを調べても、上記の状態でとまったという事例を
発見することができませんでした。

原因として考えられることはどのようなことでしょうか?
51nobodyさん:2008/08/16(土) 16:54:48 ID:???
STDIN の内容を一旦読み込んで、読み込んだ変数に対してやってみて
52nobodyさん:2008/08/16(土) 17:02:50 ID:oiXxzTPY
my $buf;
while(<STDIN>){
$buf .= $_;
}
my $entity = $parser->parse($buf);

ありがとうございます。
この形でよろしいでしょうか?
上の形にしても現状の解決はできませんでした。
新しくわかったこととして、メールに画像を添付した際に
とまってしまっていることがわかりました。
ファイル添付をしていないメールならば
$parser->parse()を抜けてきているようです。
53nobodyさん:2008/08/16(土) 17:46:56 ID:???
まさか・・・Win/LinuxでのSTDIOの扱いはわかってるよね?
54nobodyさん:2008/08/16(土) 18:02:12 ID:oiXxzTPY
> まさか・・・Win/LinuxでのSTDIOの扱いはわかってるよね?
正直今ひとつわかっていないと思います。

どこか、大前提のようなものが抜けているのでしょうか?
55nobodyさん:2008/08/16(土) 23:56:28 ID:???
何かの理由で eof が来ていなくてずっと待機しとるのではないかな。
qmail 使ったことないんでわからんけど。
56nobodyさん:2008/08/17(日) 01:13:43 ID:???
問題を切り分けろよ。
57nobodyさん:2008/08/17(日) 03:07:34 ID:???
qmail のログとか、qmail のインストールで null に出してる内容を出させるとか
.qmail 使わずに添付ファイルの受信は出来てるのかとか、色々問題を切り分けてみてよ

あと止まる直前か直後の文字コードを、正常に受信出来たときのコードで憶測してみるとか
まだまだやることはあるんじゃないの?
58nobodyさん:2008/08/17(日) 04:50:10 ID:???
変数ではなくて、ファイルにキャプチャして、
そのファイルが展開できるかどうかをチェックしてみればいいんじゃないのか。

あと、エラートラップは、きっちり書いて。
59nobodyさん:2008/08/18(月) 10:53:12 ID:???
読み込んでる時に止まってるんだからファイルに落とせないのでは?
質問者が特定場所以降のドロップっ意味で止まってるって書いてるならやる意義は十分ありますが…
60nobodyさん:2008/08/18(月) 11:46:03 ID:???
ファイルに取れないのなら、Perlの問題じゃないってこった。
61nobodyさん:2008/08/18(月) 12:32:24 ID:???
おまえら親切だな
62nobodyさん:2008/08/18(月) 14:52:08 ID:???
>>59
おまえの想像はどうだっていい
63nobodyさん:2008/08/19(火) 18:06:14 ID:???
練習がてらVBのコードをPerlで書き直していますがうまく通りません。
項目を数字で指定しない方向で同等の処理は出来ないでしょうか。
お願いします。

' VB+oo4o
OraDynaset = OraDataBase.DbCreateDynaset(SQL_STR, 0&)
aaa = OraDynaset.Fields("AAA").Value

# Perl+oo4o
my OraDynaset = OraDataBase.DbCreateDynaset(SQL_STR, 0)

$aaa = $OraDynaset->Fields('AAA')->{Value};
結果:Can't call method "Fields" on an undefined value at ***.

$aaa = $OraDynaset->{Fields('AAA')}->{Value};
結果:Undefined subroutine &main::Fields called at ****

64nobodyさん:2008/08/19(火) 18:26:43 ID:???
そもそもVBでもうまく通ってないじゃないかwwwwwwwwwwww
65nobodyさん:2008/08/19(火) 23:26:21 ID:???
>>63
自覚はないのかも知れないけれど、なんだかすごく混乱しているみたい。
VB, Oracle, oo4o, OLE, Perl のそれぞれに分けて把握を整理したほうがよさげ。
66nobodyさん:2008/08/20(水) 10:57:24 ID:???
oo4oのマニュアルではFieldsはプロパティと成っています。
エラーメッセージから分かるのは、Fieldsをメソッド/サブルーチンとして呼び出そうとしている。

それを踏まえてPerlの文法をもう少し勉強してみます。
67nobodyさん:2008/08/20(水) 23:15:22 ID:???
>>63
perlの文法は行の最後にセミコロン;が必要だよ
68nobodyさん:2008/08/20(水) 23:50:12 ID:???
すんません、教えてください

文字列で、"20080820"となっている
前日(昨日)を求めるコーディングを
教えてください。
69nobodyさん:2008/08/20(水) 23:54:12 ID:???
20080820 - 1
70nobodyさん:2008/08/20(水) 23:58:55 ID:???
>>69
それだったら、
20080801
の場合はどうするのかな。
71nobodyさん:2008/08/21(木) 00:34:14 ID:???
Date::* なモジュールを使え。
72nobodyさん:2008/08/21(木) 01:40:28 ID:???
20080800になってしまうので困ります
73nobodyさん:2008/08/21(木) 01:50:41 ID:???
perl -MDateTime::Format::HTTP -e 'print DateTime::Format::HTTP->parse_datetime('20080821')->subtract(days => 1)->ymd("")'
74nobodyさん:2008/08/21(木) 02:22:39 ID:???
use Date::Calc qw(Add_Delta_Days);
とか
use Date::Manip qw(UnixDate DateCalc Date_Init);
とか。
75nobodyさん:2008/08/21(木) 02:56:24 ID:???
timelocalでepochタイムに戻して-24*60*60してlocaltimeに食わせる

日付の話がでたついでに質問なのですが、Nヶ月後とかNヶ月前ってどうやって計算してる?
(というよりどう定義してるかの問題?)

Q1. 1月31日の一ヶ月後
Q2. 2月28日の一ヵ月後
Q3. 3月31日の一ヶ月前
Q4. 3月31日の一ヵ月後
76nobodyさん:2008/08/21(木) 03:46:07 ID:???
7763:2008/08/21(木) 08:04:49 ID:???
>>67
";"は当たり障りある部分を消すときに一緒に消えたのでしょう。

一応、文字コードが変な様ですが、通ることは通るようになりました。
項目指定にリテラル数字/リテラル文字列を指定すると変なままですけど。

my $OraSession = Win32::OLE->new ("OracleInProcServer.XOraSession");
my $OraDatabase = $OraSession->DBOpenDatabase("orcl", "scott/tiger", 0);
my $oDyna = $OraDatabase->CreateDynaset("SELECT * FROM ****", 0);

my %FN;
my $i;
for ($i = 0; $i < $oDyna->Fields->Count ; $i++){
$FN{$i} = $oDyna->FieldName($i);
}

while(!($oDyna->{EOF})) {
for ($i = 0; $i < $oDyna->Fields->Count ; $i++){
print $oDyna->Fields($FN{$i})->Value, "\n";
}
print "\n";
$oDyna->MoveNext;
}
78nobodyさん:2008/08/21(木) 09:39:20 ID:VetJG0Vx
$OraDatabase->CreateDynasetが転けていただけでした。

print $OraDynaset->Fields('ABCD')->Value."\n";
は普通に通ります。
79nobodyさん:2008/08/23(土) 09:30:39 ID:???
こっそりとsageて質問します。
ギャル文字の正規化モジュールとか知りませんか。ギャル文字への変換じゃなく、ギャル文字からの変換。

手作業で対応表を組もうとかも考えましたが、無謀すぎた……orz
80nobodyさん:2008/08/23(土) 10:04:39 ID:???
文字コードの変換について質問です。

今様々なWEBページからHTMLを取得して、それをShiftJISに変換しているのですが、
JcodeでもEncodeでも一部のページで文字化けが起こって困っています。
文字化けを極力起こしたくない場合、どのような変換方法がいいのでしょうか?
81nobodyさん:2008/08/23(土) 10:17:15 ID:???
文字化け起こしたページの原因を把握すればいいかと
元ページ自体が文字化けしてるかどうか目視することも一考
82nobodyさん:2008/08/24(日) 04:03:35 ID:???
>>80
decoded_contentが一番楽っぽい。
gzip/deflateにも対応してるみたいだし。

$r->is_success or die $r->status_line;
my $content = $r->decoded_content();
defined $content or ...;

utf8で出てくるから、あとは適当に変換で。
8380:2008/08/25(月) 20:08:13 ID:???
>>81
文字化けするページは一部文字化けしている場合が多いですね。
もともとそのページに問題があるのかも知れません。
>>82
そんな方法あったんですね、初めて知りました…。
近いうちに試してみようと思います。

返信ありがとうございました。
84nobodyさん:2008/08/27(水) 11:11:12 ID:???
Web上で動作するToDoリスト(http://img04.shop-pro.jp/PA01011/131/product/2544732.jpg)を作りたいのですが、
自分で内容を追加していくといった物ではなくて、既存のHTMLにチェックボックスがあり、
そこにチェックを入れ、「保存する」ボタンを押したら、ログファイルにチェックされているか否かを保存し、
更新後にチェックされている状態が保存されている物を作りたいのですが、このような処理はどのようにしてやれば良いのでしょうか?
最終的には自分でToDoの内容も掲示板みたく追加出来るようにしたいです。
85nobodyさん:2008/08/27(水) 12:03:04 ID:???
Queryデータ受け取って条件分岐してデータ読み書きしてHTML表示すればいいんじゃないかな
86nobodyさん:2008/08/27(水) 15:59:09 ID:???
既存のHTMLってのがどの程度のものかわからないが、cgiにそれを出力させる必要がある。
外部のものなら、パーサーで解析してチェックボックスを割り込ませて出力、とかいうことになるんじゃないか。
この作業が一番めんどくさい。
87nobodyさん:2008/08/27(水) 19:52:46 ID:???
古い本読んでたら、cgi-lib.plとかいうのが
紹介されていたんだけど、これって現役?
88nobodyさん:2008/08/27(水) 20:00:37 ID:???
既に退役。
89nobodyさん:2008/08/27(水) 20:35:39 ID:???
まじで。じゃあどうすればいいのかな?
90nobodyさん:2008/08/27(水) 20:45:09 ID:???
別に使ってもいいんじゃね
91nobodyさん:2008/08/27(水) 21:02:23 ID:???
CGI.pmが最新ですか?
92nobodyさん:2008/08/27(水) 21:25:25 ID:???
CGI.pmが標準。いささか古いが。
お好みでCGI::MinimalでもCGI::Simpleでも。
93nobodyさん:2008/08/27(水) 21:49:46 ID:???
引数の取得は自前でするのが一番軽いから自前でというのは外道ですか?
車輪の再発明?
94nobodyさん:2008/08/27(水) 22:34:42 ID:???
やれるんなら自前だってなんだっていいさ。
トレーニングのための再発明にゃあ手頃な車輪だろ。
よそに迷惑かけないようにさえすりゃ誰も止めねえよ。
95nobodyさん:2008/08/28(木) 10:53:23 ID:???
クエリの分割は、RFCの決まりとブラウザの仕様で面倒なことになっているので、
CGIやCGI::Liteやフレームワークに丸投げした方がいい、と昔Perlスレで言われた
96nobodyさん:2008/08/28(木) 16:12:26 ID:???
CGI.pmと
CGI::Minimalと
CGI::Simpleとで、

どれを使えばいいの?
97nobodyさん:2008/08/28(木) 16:28:55 ID:???
とりあえずCGI.pm
98nobodyさん:2008/08/28(木) 20:19:56 ID:???
勉強を目的に作る分には何も言わないが、
実際のサービスの為に作りこむのはアンチパターンの"高慢"。
99nobodyさん:2008/08/28(木) 22:31:17 ID:oELFSwba
スレチだったのでもう一度こちらで質問させていただきます

PHPで言うところのupload_max_filesizeやpost_max_sizeは、
Perlではどこら辺を設定すればいいんですか?
100nobodyさん:2008/08/28(木) 22:57:12 ID:???
>>99
use CGI;
$CGI::POST_MAX = $limit_by_byte;
101nobodyさん:2008/08/28(木) 23:59:40 ID:???
htmlやhttp勉強していたころからずっと今までCGI.pm使ってないな。。。LWPは使い出したが。

CGI.pmが簡単、は例からわかるんだが、
汚れた変なデータ渡されても誤動作しないのかとか
デフォルト設定をちゃんと覚えないととかちょっとだけ不安。
102nobodyさん:2008/08/29(金) 08:08:31 ID:???
古いPerlだとメモリーは無限で限界は考えなくて良いってコードが多いからその辺も気を付けるとか

何時の話だ
103nobodyさん:2008/08/29(金) 10:08:36 ID:???
そういう面倒なのをやってくれちゃってるのがそいつなんじゃないの?
104nobodyさん:2008/08/29(金) 15:26:13 ID:???
XSS対策で、引数の記号を適度に変換してくれるモジュールを自己開発しました。

マルチパートのパースがむつかしい、、、というかめんどくさい。。
while(<STDIN>)
ってしたら、大きい添付ファイルきたらいちどメモリに確保する分つらいしな。。
readでちょっとずつ読むしかないのか、、
105nobodyさん:2008/08/29(金) 15:27:54 ID:???
ん? 質問内容がわからん
106nobodyさん:2008/08/29(金) 15:45:42 ID:???
質問じゃなくてチラシの裏に書こうとした文だろう。
107nobodyさん:2008/08/30(土) 09:40:00 ID:???
ソースのコメントにでも書いておけ
108nobodyさん:2008/08/31(日) 18:20:50 ID:???
>>101 (== >>99 ?)
Perl は汎用言語として開発されています。
そのためその言語仕様は CGI (をはじめとする Web プログラミング) など他の周辺仕様と直行しており、その点で PHP とは事情が異なります。

Web アプリケーション開発のために生まれたのが PHP で、
Web アプリケーション開発にも流用されているのが Perl であると言うこともできます。

Perl は CGI で利用できる言語として広く普及しました。
その過程で生まれたノウハウを抽出したものが CGI::* などのモジュール群です。

幸い CGI.pm は pure Perl ですから、この機会に目を通してみてはいかがでしょう。
その上で、あなたが必要とする品質に達していないと判断したなら、それは新しい車輪を作るに充分な理由だと思います。
イイモノができたら CPAN で公開してください。使わせてもらいます。
109nobodyさん:2008/09/02(火) 08:28:05 ID:guk/QrQq
Flashゲームを作成しています
今スコアについて作成しているのですが
どうにも反映されません、何が違うのでしょうか
Flashのスコア登録コードは
stop ();
CGIFile = "test.cgi?" + Math.floor(Math.random() * 1000);
mySaveVars = new LoadVars();
mySaveVars.score = score;
mySaveVars.playername = playername;
myLoadVars = new LoadVars();
myLoadVars.onLoad = function (success)
{
var _loc1;
for (var _loc1 = 0; _loc1 < RANK_MAX; ++_loc1)
{
ranker[_loc1].playername = myLoadVars["name" + _loc1];
ranker[_loc1].score = myLoadVars["score" + _loc1];
} // end of for
gotoAndStop("display");
};
mySaveVars.sendAndLoad(CGIFile, myLoadVars, "POST");
110nobodyさん:2008/09/02(火) 08:30:11 ID:guk/QrQq
そしてtest.cgiには
use CGI 'Vars';
my %in = CGI::Vars;

open LOG, '+<score.dat';
my %rank = map { chomp; split /\t/, $_, 2; } <LOG>;
$rank{$in{score}} = $in{name} if $rank{$in{score}} < $in{name};
my @rank = sort { $rank{$b} <=> $rank{$a} } keys %rank;
truncate LOG, 0;
seek LOG, 0, 0;
print LOG map { "$_\t$rank{$_}\n" } @rank[0..9];

print "Content-type: text/plain\n\n";
print map { "score$_=$rank[$_]&name$_=$rank{$rank[$_]}&" } 0..9;

test.cgiにはtop10の空欄表示はされますが
登録する画面にはいかずそのまま終わってしまいます
score.datも空欄ですが、動いているようです
111nobodyさん:2008/09/02(火) 15:54:14 ID:XutqN0xS
汎用のエラーサブルーチンで、
ログに場所や原因を特定できる情報を吐くために、
callerで大元の呼び出し元からのツリーを吐く方法を探してます。

力技でやれば、階層確認用の変数を作って
mainから関数を呼ぶたびに1ずつインクリメントしていってエラー関数でforで
階層確認用の変数の分だけ回せば出来るとは思うんですが、

sub err {
 my ($sadd) = @_;
 my $s;
 for ($i=MAXVALUE; $i <= 0; $i--) {
  $s .= caller($i).' / ';
 }
 print STDERR $sadd."\n".$s;
}

手動でインクリメントすることなく、上記のMAXVALUEを取得する方法はありませんでしょうか。
112nobodyさん:2008/09/02(火) 17:08:26 ID:62/De0KZ
以下の場合だと、$hogeにはIPアドレスが入ってます。
$hoge=gethostbyaddr(pack('C4',split/\./,$ENV{'REMOTE_ADDR'}),2)||$ENV{'REMOTE_ADDR'};
以下の場合だと、$hogeは空になります。
$hoge=gethostbyaddr(pack('C4',split/\./,$ENV{'REMOTE_ADDR'}),2)or$ENV{'REMOTE_ADDR'};

後者が空になってしまうのは何故ですか?
113nobodyさん:2008/09/02(火) 17:20:16 ID:???
後者は以下と同じこと
($hoge=gethostbyaddr(pack('C4',split/\./,$ENV{'REMOTE_ADDR'}),2)) or$ENV{'REMOTE_ADDR'};
114nobodyさん:2008/09/02(火) 17:30:48 ID:???
>>111
confessじゃだめか
115nobodyさん:2008/09/02(火) 17:37:04 ID:62/De0KZ
>>113
そういうものなんですね。ありがとうございました。
116nobodyさん:2008/09/02(火) 17:44:36 ID:???
>>114
confessも読んでいくと

my $pkg = caller(++$i);
unless(defined($pkg)) {

みたいなことをしてループでネストの深さ調べてるから
インクリメントしていると言える。

見かけ上自分でインクリメントしなけりゃいいならこれで
いいんだろうけどな。
117nobodyさん:2008/09/02(火) 17:52:27 ID:IiWNBMxF
バイオインフォマティックスについて詳しい方いらっしゃいますか?
118nobodyさん:2008/09/02(火) 17:55:37 ID:???
>>114,116
ありがとうございます

> my $pkg = caller(++$i);
> unless(defined($pkg)) {

こんなこと出来るんですね…
すみません調べが足りず、callerに対して無効な範囲の引数を渡したら
落ちちゃうもんだとおもってました。

目的としては、余計な引数のリレーとかグローバル変数とか使わずに
エラーサブだけでツリー生成することでしたので、下記のような感じでテストしてみます。
うまく行ったら〆報告します。

sub err {
 my ($sadd) = @_;
 my @return;
 my $i = 0;
 while(1) {
  my $s = caller($i);
  if (defined $s) {
   @return .= $s;
  } else {
   last;
  }
  $i++;
 }
 print STDERR $sadd."\n".(join ' / ', reverse @return);
}
119nobodyさん:2008/09/02(火) 17:58:31 ID:IiWNBMxF
perlを使って突然変異前後における終止コドンのカウントをしたいんですが、初心者なのでまったく分かりません・・・(涙)
120nobodyさん:2008/09/02(火) 18:34:27 ID:???
>>114,116
抜粋ですが、下記でツリーというかパンくずリストというかそれっぽいものが出力できました。
ただ、ファイル名はrequireした元ではなく全て実行ファイル名になるようで、
あんまり意味無かったかも…

>my $i = 0;
>while (($package,
>  $filename,
>  $line,
>  $subroutine,
>  $hasargs,
>  $wantarray,
>  $evaltext,
>  $is_require,
>  $hints,
>  $bitmask) = caller($i++)) {
> push @aTree, "$filename\($line\) $subroutine";
>}
>my $sRev = join ' => ', (reverse @aTree);
>print STDERR $sRev

以上、ありがとうございましたー
>>118は無限ループっぽいのでご注意下さい
121nobodyさん:2008/09/02(火) 18:54:50 ID:???
……(呆れている)
122nobodyさん:2008/09/02(火) 19:06:01 ID:???
>>121
なんで…?

と思ってよくよく考えたら、confessそのまま使えばよかったのか…orz
すみませんなにか焦りのままにわけのわからない事をしてしまったようで…orz
123nobodyさん:2008/09/02(火) 23:30:34 ID:???
>>119
perlじゃなきゃダメなの?
124nobodyさん:2008/09/02(火) 23:53:47 ID:???
>>123
> perlじゃなきゃダメなの?

bioinformaticといえばperlってくらい。
125nobodyさん:2008/09/03(水) 02:01:14 ID:???
>>119
何の初心者かと言えばまず間違いなく Perl の初心者さんで、
バイオなんとかについては専門 (恐らく受講中) ということであれば、
# (この程度の情報はよこしてもよかろう、ケチんぼめ)

「バイオインフォマティクスのためのPerl入門」(ISBN4-87311-103-X)

を買え。
126125:2008/09/03(水) 02:16:22 ID:???
追伸:
これを機会にPerlをイチから少々嗜んでおこうと考えたなら
(または「バイオ(以下略)」のPerlに歯が立たなかったら)、
次の書籍から入るのが王道よん。

「初めてのPerl 第3版」(ISBN4-87311-126-9)

いずれにせよこの手の応用なら計算のためのモデル化が必須で、
モデル化するためには当該分野の知識が必要、と。
数式にまで落し込んで示せば誰かコード例を書いてくれるかもね。
しかしそこまでできれば自分で書けちゃうよなあ。w
127nobodyさん:2008/09/03(水) 02:46:19 ID:???
電算機言語を*嗜む*人向けのありがたいお話は
習い事板にでも書いて。
128nobodyさん:2008/09/03(水) 02:49:05 ID:???
Perlの入門書でいちばんいいのは
結城さんのだよ。

ほかのはむずかしすぎて(説明が下手すぎて)わかんないとおもう。
129nobodyさん:2008/09/03(水) 02:57:19 ID:???
配布cgiを改造して覚えた。
ここをこう直せばこう行ける、みたいな経験則で。
130nobodyさん:2008/09/03(水) 05:15:42 ID:???
経験則だけで行くと、習得に時間が掛かる上に変な癖がつく。
ラクダ本やPerldocなど読んで、基本をしっかりマスターすることが大切。
文法エラーが出なければ、なんでも良い訳じゃない事を知って欲しい。

特にファイルオープンのエラー処理を省く奴。
131nobodyさん:2008/09/03(水) 09:02:15 ID:???
>>128
お前の頭が悪すぎるだけ
132nobodyさん:2008/09/03(水) 09:20:14 ID:???
と変な癖が付いた人が言う
133nobodyさん:2008/09/03(水) 09:29:36 ID:???
Perl関係はドキュメント類が完備されているから、それでも質問に来るのは
頭の悪すぎる奴というのであってる。
134nobodyさん:2008/09/03(水) 11:33:27 ID:???
とドキュメントを残さない、不完全なドキュメントを残す人が言う
そして素人に最初から完璧な探し方を要求する
135nobodyさん:2008/09/03(水) 11:37:02 ID:???
ドキュメント読むひまがあったら人に聞くだろ、常考
136nobodyさん:2008/09/03(水) 11:59:41 ID:???
以前、人のプログラムを見ては「変な癖がついてる」「変な癖がついてる」と
連発する新人が来て、一週間で営業に飛ばしたのを思い出した。
137nobodyさん:2008/09/03(水) 13:16:42 ID:???
なあ、もしかして英語読めないやつっているんじゃね? ありえないかな?
138nobodyさん:2008/09/03(水) 13:22:49 ID:???
俺読めない。
139nobodyさん:2008/09/03(水) 13:40:17 ID:???
sub hoge ($$\@) {}
の($$\@)って何っていう名前だっけ?
140nobodyさん:2008/09/03(水) 13:48:18 ID:???
>>139
プロトタイプ
141nobodyさん:2008/09/03(水) 14:20:13 ID:???
使用目的だけを読んで使い方が判るんだ
凄いな
142nobodyさん:2008/09/03(水) 22:23:50 ID:???
>>139 の「何っていう名前だっけ?」という質問に対して
>>140 はほぼパーフェクトな回答。

そもそもが知りもしないことを、余計な格好をつけるから
そういう間の抜けたことになる。
143nobodyさん:2008/09/05(金) 06:53:30 ID:SLk/ayWJ
読み込んだHTMLファイル内に直接書かれてる「@{foo[8..15]}」のような文字列を
配列として扱えるように置換したいんですが、どう書けばいいですか?
144nobodyさん:2008/09/05(金) 07:00:40 ID:???
5.10動くレンタルサーバーの一覧はありますか?
145nobodyさん:2008/09/05(金) 08:42:28 ID:???
>>143
もっと違う方法を考えた方がいいと思う。
146nobodyさん:2008/09/05(金) 11:12:25 ID:SLk/ayWJ
>>145
大したCGIではないのでぶっちゃけどんな方法でもいいのですが、
後学のためにもこの方法でお願いしたいです。
147nobodyさん:2008/09/05(金) 12:29:59 ID:hg/3f6aE
use File::Copy;を使って
コピーする場合と、
OSのコピーコマンドを
使ってコピーする場合は
どっちが高速ですか?
また、常に上書きされるのでしょうか?
148nobodyさん:2008/09/05(金) 12:36:06 ID:???
>>147
最後に、

> 自分でマニュアルを読むのが面倒なので
> 代わりに読んで説明してください。

とつけとけ。
149nobodyさん:2008/09/05(金) 12:59:01 ID:???
>>148
おまえがマニュアルを読んで
日本語で説明しろ!
そして死ね!
150nobodyさん:2008/09/05(金) 13:12:50 ID:r9aXZuUN
use File::Copy;を使って
コピーする場合と、
OSのコピーコマンドを
使ってコピーする場合は
どっちが高速ですか?
また、常に上書きされるのでしょうか?
自分でマニュアルを読むのが面倒なので
代わりに読んで説明してください。
151nobodyさん:2008/09/05(金) 13:24:36 ID:???
ホラ、親切な>>149さん。やってあげなよ。
152nobodyさん:2008/09/05(金) 13:37:01 ID:???
OSの違いやその他の要因で違うからなんともいえないところだが、手元で50MBぐらいの
適当なファイルについて試したところでは

% time cp hoge.log hg
cp hoge.log hg 0.00s user 0.21s system 8% cpu 2.529 total

% time perl -MFile::Copy -e 'copy "hoge.log","hg2"'
perl -MFile::Copy -e 'copy "hoge.log","hg2"' 0.02s user 0.29s system 12% cpu 2.532 total

これだけみるとcpの方がはやいかな?

気になる人は何回も条件変えたりしてやってみると良いよ。
153nobodyさん:2008/09/05(金) 13:37:22 ID:???
>>151
お前まだ死んでなかったんだ。
154nobodyさん:2008/09/05(金) 14:58:46 ID:???
>>152
システムコピーを使った場合どうなります?
155nobodyさん:2008/09/05(金) 15:15:12 ID:???
質問する奴は>>1読んでからにしろ
156nobodyさん:2008/09/05(金) 20:38:54 ID:???
>>146 eval
>>147,154 計れ。
157nobodyさん:2008/09/05(金) 20:43:49 ID:???
>>146
方法を問わずなら、TT使っといて。
ttp://www.hakoniwa.net/tt/
158nobodyさん:2008/09/06(土) 11:31:36 ID:???
TTかー。うちはHTML::Templateなんだよなー。
やっぱ便利?
159nobodyさん:2008/09/06(土) 12:35:13 ID:???
テンプレート変数をテンプレートにゴリゴリ書ける点は結構おいしい。
コードとデザインの分離が不完全になりかねないが。
160nobodyさん:2008/09/06(土) 21:45:27 ID:???
つまり、TTにすると
今までデザイン担当がやってた部分を俺がやらなきゃならんってことか(笑)
161nobodyさん:2008/09/06(土) 23:42:48 ID:???
デザイナにやらすんだよ
162nobodyさん:2008/09/08(月) 09:09:39 ID:???
>161
ハハハ…… 無理だろうなあ。
163nobodyさん:2008/09/08(月) 14:05:27 ID:???
クレヂットカード作りたいんですが自宅や勤務先に電話とかかかって来るんでしょうか?
また支払いに遅れたら暴力団や政治結社とかから取り立てが来るんでしょうか?
無知でクレクレですいません(>_<)詳しい方、宜しくお願いしますm(_ _)m
164nobodyさん:2008/09/08(月) 14:29:16 ID:wRo8Y2Dq
勤務先に黒服が直接訪問してきて所在確認します。
また延滞した場合は督促状が届き、それを忘れると社会的に葬られます。
気をつけましょう。
165nobodyさん:2008/09/09(火) 13:23:57 ID:???
CGI.pmの初級質問です

h1();
<H1>が生成

h1('aaa');
<H1>aaa</H1>が生成

では
</H1>だけ生成するにはどうすればいいのでしょうか?
166nobodyさん:2008/09/09(火) 13:53:27 ID:???
There will be some times when you want to produce the start and end tags yourself.
In this case, you can use the form start_Itag_name and end_Itag_name, as in:
print start_h1,'Level 1 Header',end_h1;
167nobodyさん:2008/09/09(火) 13:55:39 ID:???
print start_h1 , '2分で見つけたぐぐれかすしね' , end_h1;
168nobodyさん:2008/09/09(火) 14:35:58 ID:???
thx
ちなみにどんな語句で検索したんですか?
169nobodyさん:2008/09/09(火) 15:26:06 ID:???
まぁ、マニュアル一度も読んでないんだろうな。
最低でもマニュアル読んで質問しろや、ぼけ。
170nobodyさん:2008/09/09(火) 15:59:27 ID:???
171nobodyさん:2008/09/09(火) 16:04:57 ID:???
マニュアル読まずに質問する初心者って何なの?
もう、プログラミングやめた方がいいよ。
172nobodyさん:2008/09/09(火) 16:09:27 ID:???
>>171
ここで聞けば答えてくれる人がいるのだから、マニュアルを読まない人が
いても不思議ではない。
173nobodyさん:2008/09/09(火) 16:11:52 ID:???
でも英語で見逃す、訳し間違えることはよくある俺。
174nobodyさん:2008/09/09(火) 16:14:58 ID:???
>>173
貴殿は、自らを成長する存在と見ておらぬのか?
175nobodyさん:2008/09/09(火) 16:16:31 ID:???
マニュアル読まないやつは叩くのが回答者の嗜みだろ。
答える答えないは別として。
176nobodyさん:2008/09/09(火) 16:21:23 ID:???
初歩的すぎるのか、ここら辺、CGI.pm関連ページでもあまり触れられないし、
start_xxx
end_xxx
ってパターン知らないと、調べるにもその先が広がらないよね
177nobodyさん:2008/09/09(火) 16:28:12 ID:???
それでも一瞥したら目に入ると思うが。

初心者が手にするような入門書には書いてないのかもしれないな。
初心者は入門書がマニュアルだから。
入門書に書いてなければ、即質問。
178nobodyさん:2008/09/09(火) 20:55:13 ID:???
Perl のマニュアルを見るには perldoc コマンドを使います:

perldoc perl

モジュールのマニュアルを見るには perldoc の引数にモジュール名を与えて実行します:

perldoc CGI

# 今回のケースはこのコマンドで表示される内容のうち、"SPECIAL FORMS FOR IMPORTING HTML-TAG FUNCTIONS" という節に載っています。

perldoc の使い方も perldoc で調べることができます:

perldoc perldoc

以上、初心者のための perldoc 入門でした。よろしくご活用下さい。
179nobodyさん:2008/09/09(火) 21:25:32 ID:???
rubyにユーザー数抜かれたくせに
態度でかいな。
180nobodyさん:2008/09/09(火) 23:58:37 ID:???
ユーザー数・・・?
181nobodyさん:2008/09/10(水) 09:33:06 ID:???
x:xxxxxxx>perldoc
'perldoc' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

Pathが通ってなかったOracle10g付属Perl
Pathを通すと動くようになった
182nobodyさん:2008/09/10(水) 13:01:51 ID:???
winか。じゃあ仕方ない。
183nobodyさん:2008/09/10(水) 13:10:53 ID:Ln4PKjnA
perldoc CGI.pm

ってやって出てくる1ページ目にものすっごいヒントがあるじゃないw

NAME
  CGI - Simple Common Gateway Interface Class

SYNOPSIS
   # CGI script that creates a fill-out form
   # and echoes back its values.

   use CGI qw/:standard/;
   print header,
      start_html('A Simple Example'),
      h1('A Simple Example'),
      start_form,
      "What's your name? ",textfield('name'),p,
      "What's the combination?", p,
      checkbox_group(-name=>'words',
              -values=>['eenie','meenie','minie','moe'],
              -defaults=>['eenie','minie']), p,
      "What's your favorite color? ",
      popup_menu(-name=>'color',
            -values=>['red','green','blue','chartreuse']),p,
      submit,
      end_form,
      hr;
184nobodyさん:2008/09/10(水) 13:30:20 ID:???
WindowsでもActivePerl入れれば、perldocもHTML版もきっちり入る。
185nobodyさん:2008/09/10(水) 14:12:03 ID:???
英語が苦手な人は、perldoc.jpを見ればいいかも

CGI - 簡単なCGI(Common Gateway Interface)クラス
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
186nobodyさん:2008/09/10(水) 16:22:39 ID:???
WindowsでもActivePerl入れられない環境もあるよ
直前に出ているOracle Server入ってる環境もOracleのPerlと競合して入れられない。
(入れられはするが環境変数が競合して可笑しな動きをする)

コマンドが使えるかどうか、使えなければ、PATHを通ってなければ通すとかすれば使えるから、そっちをやると良い
187nobodyさん:2008/09/10(水) 16:32:00 ID:???
SQLインジェクションの対策のエスケープ処理について質問です。
mysqlで勉強してます。文字コードはsjisです。
1、「’、<」などの通常の特殊文字のエスケープ
2、sjisどうしても使う場合は「SELECT 〜$str 〜」のSQL文の中で使う
 すべての文字列をEncode::from_to($str, "sjis","sjis");
 毎回これ何個もずらりと書くの大変です。
 mysqli_real_escape_string()関数も同様に毎回ですよね。

質問です。
・1だけの処理で簡単に終わらせることは可能でしょうか?
 可能でしたらどの文字をどうしたらよいのか知りたいです。
・2をすれば対策になっていますか?
よろしくお願いします。
188nobodyさん:2008/09/10(水) 16:37:22 ID:???
>>187
1.
プレースホルダ使えよ

2.
SJISは知らん。多分はまり道なので避けられれば避けたほうがいいような
気はするが避けようがないなら....まあ、頑張れ。
189nobodyさん:2008/09/10(水) 17:07:20 ID:???
inputとoutputで処理をかませる
190nobodyさん:2008/09/10(水) 21:12:56 ID:???
>>187
それを行うライブラリを書いたらいいんじゃないかな。
それがたとえ既存の車輪だとしても、勉強になるし便利になるし安全…かどうかは中身次第だけど、少なくともメインプログラムの行数が減ればバグも減る。
191nobodyさん:2008/09/11(木) 03:45:37 ID:???
IPAの声は届かないもんだね。
http://www.ipa.go.jp/security/vuln/websecurity.html

昔から疑問に思ってたんだけど、
プレースホルダ使った方が楽で確実なのに、
エスケープで通す利点ってあるの?
192187:2008/09/11(木) 04:05:18 ID:???
>>188-190
IPAの解説書にプレースホルダか一つずつエスケープ処理する
対策があるみたいですね。
意識しないでquote()使っていたので大丈夫のようです。
今度からは、プレースホルダも使ってみたいと思います。
ありがとうございました。
193nobodyさん:2008/09/11(木) 12:02:32 ID:???
inが使いたいときに困る>プレースホルダ
194nobodyさん:2008/09/12(金) 06:22:07 ID:???
>>193
where ... in (...) ってやつ?

my @fields = ( ,,, );
my $query = sprintf("select ... from Table where ... in(%s)", join(',', ('?')x@fields));
my $sth = $dbh->prepare($query) or die $dbh->errstr;
$sth->execute(@fields);

こんな感じで特に問題ないと思う。
195nobodyさん:2008/09/13(土) 14:59:35 ID:D0b2LLIL
cgi で、パラメタ文字列中の「+」(プラス)を拾いたいのですが、うまい方法はないでしょうか。
hoge.cgi?key=ab+cd で「ab+cd」という値として受け取りたいのです。
CGI::Lite, CGI::Simple, CGI::Minimum などは、皆「ab cd」と空白に変換してしまいます。
196nobodyさん:2008/09/13(土) 15:06:54 ID:???
普通は%2Bにエスケープする
197nobodyさん:2008/09/13(土) 15:08:31 ID:???
えーと、受け取る時ですが。
198nobodyさん:2008/09/13(土) 17:12:54 ID:???
"+"はブラウザが%2Bにエンコードして送ってくる。
" "はブラウザが"+"にエンコードして送ってくる。

> hoge.cgi?key=ab+cd で「ab+cd」
として受け取りたいなら、RFC書いて、各ブラウザを改良させて、モジュールを修正する。

まぁ、頑張ってくれ。
199nobodyさん:2008/09/13(土) 17:21:39 ID:???
URLのエスケープで半角スペースを「+」に変換するのが仕様なんだから、
「+」をその文字のままで扱いたかったら、>>196の言う通り
送り側が%2Bとエスケープしてからサーバーに送らんといかん。

どうしても「+」(送り側は半角スペースのつもり)のままで受け取りたいなら、
モジュールの中身を改造するか、自前で引数受け取り、デコード用の処理を書くかするしかないんじゃないの。
200nobodyさん:2008/09/13(土) 21:31:17 ID:???
$ENV{'QUERY_STRING'} =~ s/\+/%2B/g;

逃げ道はあるけど、うまい方法だと思われても困る。
201nobodyさん:2008/09/14(日) 20:04:01 ID:???
正規表現で
dddから始まる行を、置換で削除したいです
(下記の場合dddeeeが該当)

aaa
bbb
ccc
dddeee
fff

検索:ddd[a-z]
置換:\n
だとうまく置換されません
なぜ??
202nobodyさん:2008/09/14(日) 20:11:49 ID:???
^ddd.+
203nobodyさん:2008/09/14(日) 20:46:53 ID:???
s/^ddd.*?$// ;
204nobodyさん:2008/09/14(日) 21:26:37 ID:???
ム板の正規表現スレ向けのお話じゃないのかな。

Perl でやってるんだったら「こう書いてるけどうまく行かない」も書きましょう。
<$fh> =~ s/ddd[a-z]/\n/g; # うまく行かない
205201:2008/09/14(日) 21:26:47 ID:???
ありがとうございました
解決できて嬉しいです。
206nobodyさん:2008/09/18(木) 23:04:37 ID:???
$data = "MAILADDR=<入力したメールアドレス>\n PASSWORD=<入力したPW>\n";
if (open(FH, ">data.bat")) {
print FH $data;
close(FH);

↑CGIを使用しページを見ているユーザーに入力を求め、<入力したメールアドレス><入力したPW>に代入?させてファイルに書き出したいのですがいい方法ってありますか?
207nobodyさん:2008/09/18(木) 23:19:12 ID:???
1. メールアドレスとPW(?)を入力するフォームを作る。
2. そのフォームを受け取って、ファイルに書き出すスクリプトを作る。
208nobodyさん:2008/09/18(木) 23:52:53 ID:???
一行にしておいた方が後で色々楽じゃね?
209nobodyさん:2008/09/19(金) 13:28:02 ID:J2CRWlwv
>117=119
亀レスですが。
あんまりスマートじゃないけど、こんなんでどうですか? fasta形式のファイル読み込むようになってます。
BioPerl使った方がいいのかもしれませんが、私はよく知らないので・・・ テキトーに参考になさってくだされば幸いです。

ところで、ついでに質問させていただきます。 15行目の$1を22行目のprintの中に入れると、 Use of uninitialized valueのエラーが出るのですが、 これはなぜでしょうか?
お分かりになる方いらっしゃいましたら教えて、いただけますでしょうか?

>sequence1 NIDA
atgaccaccg aaacaaccgg acaccggcac acagctgacg cgaccgatcc ctacctgcgg 60
cgcgcgttgc gggaggtagc ggacgggctc aaggtcgggc gcttaccggc ccgcgtcgtc 120
>sequence2 MONA
gcttagccct aaacctcagt agttaaaaca acaaaactac tcgccagaat actacaagca 60
acagcttgaa actcaaagga cttggcggtg cttcacatcc ccctagagga gcctgtccca 120

したにつづく
210209:2008/09/19(金) 13:28:56 ID:J2CRWlwv
209のつづき

1 #!/usr/bin/perl
2 use strict;
4 use warnings;
6 open (my $fh,'<','fastafile.txt') or die "cannot open file\n";
8 $/ = '>'; #セパレーターを\nから変更
9
10 my @sequences = <$fh>;
11 shift @sequences; #要素数0は空だから削除
12
13 for (@sequences) {
14  s/^(.+)\n//; print ">$1\n";  s/\d|>//g;
17 #カウントとマッチしたところを大文字に 
18  tr/ATGCU/atgcu/;
19  my $TAG = $_ =~ s/tag/TAG/igm;
20  my $TGA = $_ =~ s/tga/TGA/igm;
21  my $TAA = $_ =~ s/taa/TAA/igm;
22  print "$_ UAA:$TAG\n UAG:$TGA\n TAA:$TAA\n\n\n";
23 }
211nobodyさん:2008/09/19(金) 13:53:37 ID:???
おれの目には15行目が見えんぞ
212209:2008/09/19(金) 13:56:08 ID:J2CRWlwv
>211
すいません。
改行制限に引っ掛かったので、14行目にまとめてました。

14  s/^(.+)\n//;
15 print ">$1\n";
16  s/\d|>//g;
213nobodyさん:2008/09/19(金) 17:07:37 ID:???
>>209
$1 は、次に正規表現が呼ばれた際にクリアされる。当然、15行目の $1 は 16 行目には
クリアされているので、22 行目で print 出来るわけない。のはいいとして、、、
- 普通 fasta format には塩基数表示なんか無い。同様にスペース区切りも入らない。
 もしあなたがそれを常用しているのなら、今すぐ止めた方が良い。
 それは「 fasta format の様なもの」にしか過ぎない。
- さらにスクリプトの方では、塩基配列中の空白、改行が残る為 「 TA A 」などのケースを逃す。
 (空白は通常の fasta format を想定してるならそれでも良いがそうなると s/\d|>//g; が謎。
 改行の除去忘れは重大)
- local せずに $/ ='>' するのはスクリプトが大きくなった時、混乱を招くのでお勧めしない。
- frame 無関係に終止コドンの数を数えてどーすんの?

以下、引数に multi fasta、cds(DNA 配列) frame 毎の終止コドンの数を単純に数える場合。
# エラー処理など割愛、インデントは全角空白
sub cnt{
 # sequence を 3base 区切りにし、table と照合し、該当数を帰す。
 my %table = %{ shift @_ } ;
 ( my $seq = shift ) =~ s/(.{1,3})/$1 /g ;
 return scalar grep { $table{$_} } split /\s+/, $seq ; # hit 無しの場合は 0 が帰る
}
my %stopcdn = qw( TAA 1 TAG 1 TGA 1 ) ;
# file を丸呑みした後、/(?=^>)/m にて split し、無名配列として回す。
for ( split /(?=^>)/m, do{ local $/ ; <> } ) {
 s/^>(.*?)$//m ; my $name = $1 ; s/[\n\r\s]//g ; my $seq = uc ; # ごにょごにょ調整、大文字化
 # frame 順に cnt させ、その結果をプリント。
 printf "%s\tframe%d\t%d\n", $name, $_ + 1, cnt \%stopcdn, substr $seq, $_ for 0 .. 2 ;
}
214209:2008/09/19(金) 18:44:46 ID:???
>>213
添削ありがとうございます。
半端な知識で回答してしまって申し訳ないorz
>>117氏を混乱させるとこでした。
出直してきます。
215nobodyさん:2008/09/20(土) 07:08:55 ID:???
http://www.dotup.org/uploda/www.dotup.org2038.zip.html

ゲームの得点ランキングを作ろうと思い、
名前・得点・コメントを入力してランキングに登録するといった形のものを作りたかったのですが、
値を入力し、送信してもうまく表示されません。
logのファイルに書き込みはできてるみたいですが、正しくかけていないように思えます。

どうすればランキングを表示できるでしょうか?
もうどこが間違ってるのか分からなくなってしまいましたので、アップロードさせていただきました。
どなたか修正・ご指導よろしくお願いします。
216215:2008/09/20(土) 07:44:46 ID:???
http://www.dotup.org/uploda/www.dotup.org2048.zip.html
URLミスです。こちらでお願いします。

http://www.cgi-web.net/download-top.html様の
quizというCGIを元に改造してみたものです。

よろしくお願いします。
217nobodyさん:2008/09/20(土) 08:09:35 ID:???
>>215
めんどい。
はい、次。
218nobodyさん:2008/09/20(土) 08:23:17 ID:???
※ 修正は有料にて承ります。
219nobodyさん:2008/09/20(土) 08:39:59 ID:???
このあたりのはんちゅうじゃないのかな?

★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
220215:2008/09/20(土) 18:44:01 ID:???
わかりました。そちらで聞いてみます。
ありがとうございました。
221nobodyさん:2008/09/21(日) 08:39:11 ID:???
パソコンの中でCGIを動かしたいんだけど、
どこの解説ページを見ればいい?

XAMPPと自分でインストールしたアパッチで、
もう、通常のHTMLファイルと、PHPは
動くようになってます。

PerlもActivePerlでDOSプロンプトのコードは
動くようになってます。

あと、たぶんアパッチの設定だと思うんですけど。
222nobodyさん:2008/09/21(日) 09:04:26 ID:???
>>221

Options ExecCGI
AddHandler cgi-script .cgi .pl
223nobodyさん:2008/09/21(日) 10:49:20 ID:???
XAMPPをインストールしてあるんよ。
それで、普通のhtmlファイルは表示できるし、
http://localhost/1/1.htmlとかで

そんで、PHPのファイルも実行できるんよ。
http://localhost/xampp/

そんで、今、パソコンの中に、
ActivePerlがインストールされているんだけど、
さらに、xamppのホームページにある、
perlのアドオン、ていうのをとってきて、
インストールしないとだめなのかなぁ?って思って。

でも、そんなことしたら、自分のパソコンの中に、
activeperlと、xamppのperlと、二つのperlが混在することに
なりますよね。それでいいのかなぁ?と。
224nobodyさん:2008/09/21(日) 10:51:02 ID:???
やりたいことは、perlでCGIのファイルを作って、
自分のパソコンの中で動かすこと!

で、アパッチはたぶん、xamppのアパッチを使えばいいと
おもうんだけど、perlは、前から使ってるactiveperlで
いいのかな?って。

その場合、何か設定は必要なの?

その場合、その設定は、xamppの、アパッチの、
httpd.confに対して行うの?
225nobodyさん:2008/09/21(日) 10:59:17 ID:???
できた。

できた。できた。できた。できた。できた。できた。できた。できた。できた。できた。できた。

ボクのパソコンの中でハローワールドが動いた!!!!!!!!!!!!!
226nobodyさん:2008/09/21(日) 11:10:05 ID:???
>225
忘れていたものを思い出させてくれた
227nobodyさん:2008/09/21(日) 14:44:46 ID:???
文体からomotiを思い出した
228nobodyさん:2008/09/21(日) 18:53:27 ID:???
忽然と消えたomoti
229nobodyさん:2008/09/21(日) 21:55:27 ID:???
ム板のCLI日記に加えてCGI日記も始まるのか。
230nobodyさん:2008/09/21(日) 23:12:41 ID:???
そっとしておいてやれ。
231nobodyさん:2008/09/22(月) 02:52:25 ID:???
警察に通報しました。
232nobodyさん:2008/09/26(金) 08:48:40 ID:???
flockって何回かトライする必要はないのでしょうか?

for (1..5) {
flock(FH, 2) and last;
sleep 1;
}
233nobodyさん:2008/09/26(金) 10:00:49 ID:???
ない
234nobodyさん:2008/09/26(金) 10:12:12 ID:???
mkdir|symlink がうまく行くまで5回ぐらい試すスクリプトの妙な影響かな。
235nobodyさん:2008/09/26(金) 11:15:27 ID:???
ロック取得できない時に早期にエラー返す必要があるとか
いくつかのファイルのうちどれかでロックが取得できればいい場合に
LOCK_NBつけて、場合によってはループまわすことはあるが
普通に使ってる分にはそんな事する必要もない
236nobodyさん:2008/09/26(金) 11:25:11 ID:???
そもそもflockの処理からタイムラグを億法が危険だと思う。
237nobodyさん:2008/09/26(金) 11:27:33 ID:???
詳しく
238nobodyさん:2008/09/26(金) 12:15:18 ID:???
複数回トライいらないんですね。
了解しました。
239nobodyさん:2008/09/26(金) 13:37:22 ID:???
ユーザーフレンドリーで考えるなら何回かトライしてあげたほうが優しいよね
240nobodyさん:2008/09/29(月) 01:27:41 ID:???
ブラウザでオンライン対戦できるゲームを作っています。
規模が大きくなるにつれてファイルを分割したのですが、
モジュールが呼び出し元のパッケージの変数を要求することが多く、
一々変数の前にパッケージ名をつけなければならないのが非常に面倒です。
mainパッケージの変数を簡単に呼べるようにno strictしたりもしましたが、
こうするとコードを書く効率が悪くなります。

何か解決法は無いでしょうか?モジュールの分割の方法が下手なんでしょうか。
241nobodyさん:2008/09/29(月) 01:39:41 ID:???
くれぐれも共有サーバでやるなよ
242nobodyさん:2008/09/29(月) 01:53:46 ID:???
>>240
わざわざ名前空間を明示しない意味がわからない

例えば新宿駅で、京王線のホームで駅員を呼んだら京王線の職員が駆けつけてくれたのに
「JRの職員が来ないのはなぜだ!!(#゚Д゚)」と言ってごねている人を君はどう思うか・・・

八王子市内から市外局番なしで電話をかけておいて、「03局に繋がらない!!(#゚Д゚)」と言って
NTTにクレームを付ける人をどう思うか・・・
243nobodyさん:2008/09/29(月) 04:50:42 ID:???
コマンドプロンプトの引数に関する質問です。
以下のようなプログラムをtest.plとして保存し、プロンプトから
>perl test.pl hoge hugaと実行すると引数が想定どおりに表示されていきますが
>test.pl hoge hugaとすると何も表示されません。
拡張子.plはperl.exeと関連付けられているので実行はされるんですが、引数がうまくわたっていないようです。
後者の場合でも引数が表示されるようにするにはどうすれば良いでしょうか教えてください。

$i = 0;
foreach (@ARGV) {
print "$i:$_\n";
$i++;
}

環境:WindowsXPとActivePerl v5.8.8
244nobodyさん:2008/09/29(月) 09:02:48 ID:???
それは壊れてるね
廃棄するしかないですね
245nobodyさん:2008/09/29(月) 10:17:10 ID:???
>>243
関連付けが間違ってるか、Windowsが壊れたかのどっちか。
うちのWindowsは、たまに関連付けが壊れるので困る。

C:\Perl\bin\perl.exe "%1" %*
246nobodyさん:2008/09/29(月) 14:38:34 ID:???
640×480の画像をアップロードした時に、同時に160×120のサムネイル画像も作成するプログラムを組んでいます。
それで画像のリサイズはImage::Magickで何とかなったんですが、作成後の容量がかなり大きくなります。

元の画像が100KBに対して、サムネ画像は30KBくらい。
quality値を下げても、画像が劣化するだけで容量がほとんど変わりません。

解像度はこれ以上落とせないとして、何か容量減らす方法って何か無いでしょうか?
理想は10KB以下で、画像の劣化は多少は諦めます。

どなたか分かる方がいればお願い致します。
247nobodyさん:2008/09/29(月) 15:59:15 ID:???
resize => thumbnail

どういうコード書いてるかエスパーじゃないからわからないけど小さくするのにresize関数
使ってるとか?
248nobodyさん:2008/09/29(月) 17:18:36 ID:???
説明不足ですいません。
resizeで画像を小さくした後、Setで画質を下げてます。

以下ソース。

$gazouはアップされた640×480の画像です。


use Image::Magick;

$image = Image::Magick->new;
$image->Read("$gazou");

$image->Resize(width => 160,height => 120);
$image->Set(quality=>50);

$image->Write("$gazou2");
249247:2008/09/29(月) 18:00:47 ID:???
$image->Scale(width=>160, height=>120);
$image->Sample(width=>160, height=>120);

thumbnailって関数あったと思ってたけどぐぐっても見つからなかった
ScaleかSampleだったかな
とにかく画像の容量は境目が鮮明なほど大容量になるから普通はぼかし入れてサイズ変更
することで容量がコンパクトに収まる。確かResize関数はそれをやってなかったから脹れる
250nobodyさん:2008/09/29(月) 18:08:53 ID:???
手元にあったサムネール作成するコードはこんな感じ
return $rc if $rc = $image->Read( $_[0] );
my($width,$height) = $image->Get( 'width' , 'height' );
return $rc if $rc = $image->Thumbnail( width => $WIDTH , height => $height * ( $WIDTH / $width) );
return $rc if $rc = $image->Write( $_[1] );
251nobodyさん:2008/09/29(月) 18:29:54 ID:???
Thumbnailメソッドはあるよ。

JPEG使えばquality=>50で大体10k切れると思う。
252246:2008/09/29(月) 20:17:47 ID:???
皆様コメントありがとうございます。

>>250を参考に、>>248のソースの中のこの行を、
$image->Resize(width => 160,height => 120);

$image->Thumbnail(width => 160,height => 120);

こう変えてみたのですが、エラーも何も出ずに処理が中断されました。
ちなみにResizeをScaleとSampleに変えた場合は、いちおう画像は作成されましたがResizeと同じような容量でした。

ひょっとしてサーバーが対応してないのかな…
253251:2008/09/29(月) 20:25:35 ID:???
華麗にスルーされた(笑
せいぜい頑張りたまえ。
254246:2008/09/29(月) 20:36:42 ID:???
>>253
すいませんw
でも元々の画像は全てjpgで統一してるので、あとはThumbnailが動けばいいんですが…
255nobodyさん:2008/09/29(月) 21:54:40 ID:???
>>253はすでに書いてあることしか書いてないじゃん
そりゃスルーされるわ
256251:2008/09/29(月) 22:15:24 ID:???
>>255
Image::Magick使ってから発言してるか?
160*120ドットにResizeして、JPEG,Quality50でWriteするだけで、10KB以下になるぞ。
257251:2008/09/29(月) 22:20:16 ID:???
つーか、160*120の8bitカラーとして非圧縮で19,200バイトなんだから、
GIFで圧縮したとしても、15KB程度ぐらいには圧縮可能だろうさ。
258nobodyさん:2008/09/29(月) 22:24:21 ID:???
>246
今回の場合とは違うかもしれないが、自分も似たような症状でハマったことがある。
原因は、画像に含まれるコメントなどの付加情報だった。

Thumbnailなら消えるのかな?
259251:2008/09/29(月) 22:30:58 ID:???
だとしたら、Write前にStripかませば潰れるってことか。
260nobodyさん:2008/09/29(月) 22:31:22 ID:???
>>256
お前は Image::Magic しか使ってないのか?
画像書き出しの基本を自慢気に書くなよ恥ずかしい
261246:2008/09/29(月) 22:56:00 ID:???
何かいろいろと荒れる原因を作ってすいません…

結果から言うと無事に減量に成功しました。
>>258さんの言う通り余計な情報が入ってたからみたいで、

$image->Profile();

このコマンドを使って付加情報を消してみまたところ、元が200KBの画像もQuality75で4KBほどに落ちました。
>>251さんの言うStripも試してみましたが、サーバーが対応してないのかしてエラーが…

何かあまりよく無い方法かもしれないけど、とりあえず減らせたのでこれでいってみようと思います。
本当はThumbnailが使えたら一番良かったんだろうけど…

皆様、どうもありがとうございました。
262258:2008/09/29(月) 23:41:26 ID:???
>261
お。そりゃえがった
263nobodyさん:2008/09/30(火) 11:08:00 ID:???
thumbnailもstrip無いってよほど古いVersionなのか?
くっついてるライブラリの問題?
264246:2008/09/30(火) 14:15:08 ID:???
>>263
ロリポップですorz
多分かなりバージョンが古いと思います。

ローカルのサーバーだとImage::Magickの最新版入れたからどっちのコマンドも使えるんだけど…
逆にProfileがエラーで使えず。

このどっちつかずの状態が非常に面倒だw
265nobodyさん:2008/09/30(火) 16:09:35 ID:???
常に最新ライブラリが使えるなんて、自前鯖で自力で入換えできる人しか使えないと思った方が良いよ
266nobodyさん:2008/09/30(火) 16:40:02 ID:???
管理者にメール投げれば対応してくれることもあるけど、期待はしない方が無難
267nobodyさん:2008/09/30(火) 18:15:01 ID:WMNZymKE
perl勉強したらperlでwindowsアプリケーションもつくれますか?
268nobodyさん:2008/09/30(火) 18:50:21 ID:???
269244:2008/10/01(水) 05:05:58 ID:???
>>245
assoc .pl=Perl
ftype Perl=C:\Perl\local\bin\perl.exe "%1" %*

と何度かしているうちに直った
ありがとう
270nobodyさん:2008/10/03(金) 14:04:41 ID:???
PHPのように、Perlの記述をHTMLに埋め込むようなことを実現するライブラリ、
もしくはモジュールはありますでしょうか?
271nobodyさん:2008/10/03(金) 14:23:53 ID:???
つApache::ASP
272nobodyさん:2008/10/03(金) 18:25:13 ID:???
>>271
サンクス
調べてみます
273nobodyさん:2008/10/04(土) 18:08:22 ID:???
CPANからインストールしたモジュールを
他のサーバにもそのままコピーしたいのですが
何か良い方法ありませんか?
同じ環境を作りたいんです
お願いします
274nobodyさん:2008/10/04(土) 18:12:10 ID:???
>CPANからインストールしたモジュールを
>他のサーバにもそのままコピー

それをやればいいと思うよ
275nobodyさん:2008/10/04(土) 18:14:56 ID:???
CPANのフォルダをそのままコピーで良いんですかw
な、なんだってー知らなかったー
276nobodyさん:2008/10/04(土) 18:18:35 ID:???
CPANのフォルダをそのままコピーしろなんて誰も書いてないわけだが
277nobodyさん:2008/10/04(土) 18:50:33 ID:???
>274の書き方なら、>275の解釈が正しいんじゃないかなw
278nobodyさん:2008/10/04(土) 19:57:19 ID:???
じゃあもうそうしろよ
279nobodyさん:2008/10/05(日) 04:46:08 ID:???
Miyagawaとかその辺のレベルの話にまったくついていけないんだが・・・
なんつーか、自分のレベルの低さにげんなりすることってない?
あのレベルにいくまでどのくらいかかるのやら。
280nobodyさん:2008/10/05(日) 08:33:22 ID:???
>>279
知的レベルが普通なら、1週間くらいで。
281nobodyさん:2008/10/05(日) 09:32:19 ID:???
>>279
自分のペースでええやん。
俺なんかああいう人たちが苦労して切り開いた道を、すこーし後ろから付いていくだけだから。
まぁ追い抜きたいなら止めないけど。
282nobodyさん:2008/10/05(日) 13:41:01 ID:???
CGI::Liteと
CGI:Minimalの
違いについてカンタンに説明してください。

ちなみにグーグルで検索しても
説明ページは出てきませんでした。
283nobodyさん:2008/10/05(日) 13:48:01 ID:???
>>282
CPAN行って好きなだけ比較しろ
284nobodyさん:2008/10/05(日) 16:35:07 ID:???
>>282
お気に入りに入れておくといいよ。
http://search.cpan.org/
285nobodyさん:2008/10/05(日) 18:28:09 ID:???
>>282
おまえ、プログラミングに向いてないわ。
286nobodyさん:2008/10/05(日) 21:52:46 ID:???
perlモジュールの検索のコツはありませんか?
モジュールたくさんあって、みなさんこれ全部把握してるんですか?
有名なところだけしか使わないんですか?
初心者ですみません
287nobodyさん:2008/10/05(日) 22:08:05 ID:???
全部把握なんて無理無理w
それっぽいキーワードで検索して引っかかったもの使ったり
必要なところだけ切り出して使ったりしてるだけ

まぁ車輪の再発明と言われようが作ってみるのも悪くない。
288nobodyさん:2008/10/05(日) 22:09:47 ID:???
検索のコツは「ほしい機能を英単語にして放り込む」とかじゃダメかね。
日本語でも「cpan 機能名」でググればけっこー見つかるけど。
289nobodyさん:2008/10/05(日) 22:11:33 ID:???
>全部把握なんて無理無理w

安心しましたw
有名どころと使えそうなのが検索で出たら使う
って感じですかね
290nobodyさん:2008/10/05(日) 22:12:48 ID:???
>「ほしい機能を英単語にして放り込む」

これ良いですね試してみます
291nobodyさん:2008/10/06(月) 04:55:13 ID:???
>>286
CPANの一覧表に一通り読んで、「おお、こんなものがあるのかそんなものもある
のか」とおどろきつつ大まかなところを掌握しておく。

……というのをやったのはもう数年前だな。

もう増え過ぎて困難になってるかな。
292nobodyさん:2008/10/06(月) 08:23:17 ID:mCk9rMM2
掌握
293nobodyさん:2008/10/06(月) 08:59:44 ID:???
把握じゃなくて掌握してしまったのか
巨大な敵は陰に隠れるというが・・・
294nobodyさん:2008/10/06(月) 16:08:49 ID:4zLyyJ4I
掲示板を作成していてhtmlのformから受け取ったものをデコードする関数、
書き込みの条件を満たしているかチェックする関数、ログに書き込む関数、
と分けて
#!usr/local/bin/perl
&decode;

&writelog;
のようにしているのですがcheckからある変数を
受け取って他の関数内で使いたいとき皆さんはどうしてますか?
グローバル変数でやろうとするとどうしてもグローバル変数がかなりの数に
なってしまいますし、だからと言って($abc,$efg)=&xyz;
のようにしてしまうと無駄な変数が増えてしまうしlocalでやるのも
結局、グローバル変数使ってるのとあまり変わらないような気がします・・・
上記のように&decode;✓…のようなやり方自体がよくないでしょうか?
馬鹿みたいな質問ですみません。答えていただけるとありがたいです。
295nobodyさん:2008/10/06(月) 16:29:40 ID:???
オブジェクト指向でやればいい

use MYLIB;
my $obj= MYLIB->new;
$obj->decode;
$obj->check;
$obj->writelog;
296nobodyさん:2008/10/06(月) 17:11:10 ID:???
>>294
やり方は色々だけど。
hash(のref)渡しもあるね。
use Data::Dumper ;
my %hash = ( hoge => 1 , foo => 1 ) ;
sub hoge{ shift->{hoge} = q{hoge} ; }
sub foo { $_[0]->{foo} = q{foo} ; $_[0]->{piyo} = q{new} ; }
sub bar{ my $ref = shift ; $ref->{bar} = q{new} ; }
hoge \%hash ;
foo \%hash ;
bar \%hash ;
print Dumper \%hash ;
297nobodyさん:2008/10/06(月) 17:49:55 ID:???
んー、構造体のようなものを作るのもアリなのかなあ……?
298nobodyさん:2008/10/06(月) 18:21:26 ID:???
根本的にわかってない奴
299nobodyさん:2008/10/06(月) 18:23:54 ID:mCk9rMM2
オールグローバルでいいじゃない。
掲示板くらい。
300nobodyさん:2008/10/06(月) 18:32:07 ID:???
そのやりかたでやりたいのであれば、連想配列で渡すとか。
my %query = &decode;
my $error1 = &check(%query);
my $error2 = &writelog(%query);

まぁグローバル変数もわかってないんだろうけど。。。
301sage:2008/10/06(月) 20:36:18 ID:5bsf/GRb
txtに書き込んである変数を呼び出しても使えないの?

*.txtの内容
<A href="../$page.html>リンク</A>

↓呼び出す

*.cgiの内容
$page = a;
$data[0]

txtの内容はちゃんと反映されてるのだが、
*.txtの中の$pageはそのまんま反映されてしまう。
(http://***/$page.htmlのまま


どうしたもんか?
302nobodyさん:2008/10/06(月) 20:41:43 ID:???
>301
もうちょっと推敲してから質問してくれ
303nobodyさん:2008/10/07(火) 01:05:04 ID:???
偶然ですね。

別所ですが、ちょうど同じような質問が出されていたみたいですよ。
ttp://pc11.2ch.net/test/read.cgi/php/1218030872/301
304nobodyさん:2008/10/07(火) 01:05:59 ID:???
ごば
305nobodyさん:2008/10/07(火) 01:07:19 ID:???
( ^ω^)
306nobodyさん:2008/10/07(火) 01:48:33 ID:YSCh74Wr
>>294です。お返事ありがとうございます。
正直皆さんの回答を見ても知識不足のためよくわかりませんでした・・・
>>299さんの言うとおり重さや綺麗汚い気にせずとりあえずグローバル使い
まくりで仕上げてみようと思います。答えてくださった皆さんありがとうございました。
307nobodyさん:2008/10/07(火) 11:22:00 ID:???
>>305
進研模試でいうとfjがおよそ偏差値45、民放地上波は約40、
ニュース速報+は35程度を対象にしています。
308nobodyさん:2008/10/07(火) 12:38:56 ID:???
成長しないタイプ
309nobodyさん:2008/10/07(火) 23:22:26 ID:???
>>294
「データのリファレンスを受取って(デコード|チェック)済データのリファレンスを返す」ように各サブルーチンを書いておいて:

&writelog(&check(&decode));
310nobodyさん:2008/10/07(火) 23:46:05 ID:???
チェックなんて何回もいらん
一回で済ませ
311nobodyさん:2008/10/08(水) 00:07:51 ID:???
>>306
悪いこといわんから変数受け渡しで書いてみろ。
ハッシュ(参照)で受け取って、ハッシュ(参照)で渡せば、なんてことはない。

特に永続化環境(mod_perl等)ならグローバルを使うという発想はないと思ったほうがいい。
312nobodyさん:2008/10/08(水) 00:50:42 ID:???
$hoge = 'http://yahoo.co.jp/?hoge=hoge&huga=huga';
$hoge = 'http://excite.co.jp/?hoge=hoge&huga=huga';
$hoge = 'http://goo.ne.jp/?hoge=hoge&huga=huga';
などの、ドメイン部分が不定な文字列を、すべて
$hoge = 'http://example.com/?hoge=hoge&huga=huga';
のように置換したいのですが、どんな置換をすればいいでしょうか?
313nobodyさん:2008/10/08(水) 01:07:08 ID:???
s{(?<=http://)[^/]+}{example.com};
314nobodyさん:2008/10/08(水) 01:07:59 ID:???
>>312
ヒント:置換演算子
s{http://[^/]+}{http://example.com};
315nobodyさん:2008/10/08(水) 01:14:40 ID:???
>>313
後方一致検索というものを知りました、ありがとうございます。
>>314もどもです。
316nobodyさん:2008/10/08(水) 02:25:08 ID:Ayb4NO8c
Perlなんて適当にくんだらいいんだよ
317nobodyさん:2008/10/08(水) 04:21:15 ID:???
>>310->>311
上げ荒しの回答に納得する様な質問者には何を言ってもムダ。
例まで書いても参考にすらならんよ。
318nobodyさん:2008/10/08(水) 04:22:18 ID:???
309だった。orz...
319nobodyさん:2008/10/08(水) 05:46:48 ID:???
どうかどうかどなたかお願いします
ttp://oshiete1.goo.ne.jp/qa3380695.html
このサイトで質問してる人と同じ質問ですが、
クッキーは使わず、複数のドラッグできる画像の移動したデータを他の人も移動後の状態で閲覧できるようにしたいです。
掲示板のスクリプトを利用して全部保存すれば、元からロックも付いてて便利だと思ったのですが、
座標を渡すことが出来ないので困ってます。
現在HTMLにジャバスクリプトで簡単な形を作って試しているのですが、
どうにも、保存のところで何もアイデアが浮かばない。
一週間、暇な時間に検索して回ったのですが、
解決策には出会えませんでした。

ジャバスクリプトで移動できる画像ファイル(img1~img6等)とコメント部を各画像毎に対応させた名前のボタンをクリックすることで
コメントと画像ファイルを保存できるようにしたい。
何か知恵を貸してください。
320nobodyさん:2008/10/08(水) 05:57:55 ID:vsHGNNNA
>>294です。グローバル変数はそんなに悪いものなのですか。
スクリプトが大きくなれば大きくなるほどスクリプト自体見づらくなるだろうし、
他人からすると見づらいかもしれませんが、無駄に変数作って無駄にメモリへの書き込み
増やすぐらいならグローバル変数使うほうがいいと思ってました。
変数の中身が同じ内容なら新しく書き込まず同じメモリを参照するということはないですよね?
皆さんが教えてくれた方法をいくつか試してやってみようと思います。
質問に答えてくださった方々ありがとうございました。
321nobodyさん:2008/10/08(水) 06:58:31 ID:???
>>320
>>296のように、リファレンスで渡せばコピーは発生しないよ。
直接中身を弄れるから、returnで返す事も要らない。
322nobodyさん:2008/10/08(水) 10:04:27 ID:???
>無駄に変数作って無駄にメモリへの書き込み

この考え方のが無駄
323nobodyさん:2008/10/08(水) 10:25:26 ID:???
メモリのread/write負荷までちまちま気にして作らにゃならん「掲示板」って
どんなんだろうとは思う。
324nobodyさん:2008/10/08(水) 10:40:29 ID:???
Cならもっとメモリ気にしてアロケートしていかないといけないからまだまし
325nobodyさん:2008/10/08(水) 16:11:59 ID:KrA4Ywcm
>>321
そうなんですか。自分はパッケージ?(Data::Dumper)というのは触ったことないので
これを機会に触ってみようと思います。
>>322 >333
仮に完成しても人が来るかもわかりませんが仮に来てくれて書き込みがあった場合
1回の書き込みでテキストから100行ほどの文を3つの配列によみこんでまた書き込みしなければ
いけないので変数受け渡しでやるとすごい負荷になるんですよね。
しっかりした知識があれば1つの配列で収まるかもしれないし
それ以前に配列だけグローバル変数にすれば済む話ですが。
とりあえずできる限りローカル変数にしてみようと思います。
326296:2008/10/08(水) 17:23:24 ID:???
……Data::Dumper は単にデータをダンプする物です。
掲示板の機能とかには関係ありません。
>>296を全部コピペして、「コマンドラインから実行」してみてください。
%hash の内容が書き換っている事が分ります。
327nobodyさん:2008/10/08(水) 18:07:19 ID:???
ある変数の値がおかしくなるバグが発生したとき、その変数を使ってる部分見直すことになる。
変数が一部分でしか使われていないなら、その使われている辺りを調べればいいけど、
グローバル変数の場合、最悪、全てのソースコードとにらめっこすることになる。

サブルーチンのテストするにしても、グローバル変数がどこで使われてるのか
分からないから、全ての変数を設定しないといけない。

そんな理由で、グローバル変数は定数ぐらいにして、捨てたほうが楽になるよ。
同じ理由で、一つのハッシュに詰め込みすぎるのにも注意してね。
328nobodyさん:2008/10/08(水) 18:20:31 ID:???
>>319
掲示板と画像ドラッグを同列に扱うという感覚がよくわからない。
あるページに複数がアクセスしてるとき、誰が画像の主導権を握るの?
リアルタイムで動かすなら、Perlではどうにもならんから、AjaxとかASP.NETスレで訊いてみれば?
329nobodyさん:2008/10/08(水) 19:13:15 ID:Ayb4NO8c
変数とかいうより、もっと大きな構造を考えた方がいい
いくら変数をローカルにしたところで、無駄な処理やループが大毛りゃ話になりません
330nobodyさん:2008/10/09(木) 00:02:38 ID:???
>>328
書き込みボタンを押した時点で、ロックをかけようと思ってます
同時に何人かが動かし続けるような状態にはならないと思う
A 画像A
B 画像B
書き込みボタン

Aさんが画像を動かして書き込みボタンを押して変更したとき
Bさんは動かす前の画面のままで、画像を動かし書き込みボタンを押したら、Aさんは無視してBさんが動かした状態に更新されていいです

それか
A 画像A OK Clear
B 画像B OK Clear

こんな風に数行に渡ってかかれたものをOKボタンで座標と名前上書きでもいい
一人の人が一つのボタン、一つの画像と名前用テキストボックスを所有
Aが動かしたとき、Bがアクセスし動かしてても、ページはAが動かす前の状態
Aが動かし終わってAの画像座標を保存したとき、Bが見てるのはまだAが動かす前の状態
Bが動かしてOK押したとき、やっとBが見れるのはAもBも動いた後の状態
こんな風にできたらいいなと思ってます

Javaよりも、ジャバスクリプトとParlでできそうと思って・・・
ジャバスクリプト部分は完成してます
後はOKボタンでどう座標を保存するか・・

説明いまいちですか?
331nobodyさん:2008/10/09(木) 02:03:13 ID:???
>>330
A,Bはそれぞれ自分専用の画像を動かすってこと?
ま、いいやw

座標をクエリ文字列にしてURLにして送信ってとこまではおk?
JSONにして送信してもいい。
基本的にJavascriptの質問な気がする。。。
332nobodyさん:2008/10/09(木) 02:40:00 ID:???
>>331
レスありがとうございます
調べて、やってみます;
スレ違いかもしれなかったのに、どうもありがとう
333nobodyさん:2008/10/13(月) 00:56:20 ID:Zn63xY/1
WordDecoderのunmimeメソッド文字化けについての質問です。
以下のようにデフォルトキャラセットをUTF8とし、メールを解析しているのですが、
MIME::WordDecoder->default(MIME::WordDecoder->new(['*' => sub {jcode(shift)->utf8},]));
my $body = unmime($entity->bodyhandle->as_string);

文字列「結構色々」の「構色」で文字化けが発生し、以降の文がおそらくアスキー文字の出現まで文字化けが続きます。
結=?'!9FI$・・・・・・・・というような文字列に文字化けしています。

もとの文字列(メールの原文ISO-2022-JP)をJcodeで直接UTF8にコンバートするとこのような文字化けは発生しません。
これは何が原因かわかる方はいらっしゃいますか?

unmimeはbase64エンコードされたメールなども処理するので、できれば使いたいのですが。
334nobodyさん:2008/10/14(火) 02:12:34 ID:7R/mK8k7
ID晒して質問させていただきます。

PerlでApacheのnoteを取りに行くにはどうすればいいでしょうか?

test.cgi

#!/usr/bin/perl
print "Content-type: application/x-httpd-cgi\n\n";
my $r = Apache->request()->main();
my $name = $r->notes('name');
print $name;
exit(0);

参考元:http://jp.php.net/manual/ja/function.apache-note.php

取りに行くのに必要な条件、足りない記述などを教えていただきたいのです。
ファイル内の記述以外に、mod_perlが必要だとかはありませんか?

ご教授、よろしくお願いします。
335nobodyさん:2008/10/14(火) 10:26:02 ID:???
そもそも use Apache::Request; が無いが・・・
336nobodyさん:2008/10/15(水) 13:00:34 ID:???
perlでyyyy/mm/dd hh:mm:ssみたいな文字列から、timeで得られるような値を取得する方法ってありましたよね?
たしかモジュールで提供されてたと思いますが・・・
337nobodyさん:2008/10/15(水) 18:02:46 ID:???
>>336
use Time::Local;

$time_str = "2008/10/15 17:54:32";

$time = timelocal sub{@_[5,4,3,2],$_[1]-1,$_[0]}->($time_str=~m!^(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)$!);
338nobodyさん:2008/10/15(水) 18:03:45 ID:???
モジュールならDate::Parserとかで探してみたらいい。
339nobodyさん:2008/10/15(水) 19:04:48 ID:???
340nobodyさん:2008/10/15(水) 19:24:03 ID:???
>>337-339
ありがとうございます。
助かりました m(_ _)m
341nobodyさん:2008/10/17(金) 17:00:00 ID:M5nni1qD
プレースホルダを使用して、executeからバインド変数で値を送ると、
変数内の末尾のスペースが全て削られて、
実行されてしまうのですが、同様の事象を経験した人いませんか?
342nobodyさん:2008/10/18(土) 18:37:34 ID:???
掲示板程度なら書けるようになったので、次の一歩として下記の本を読もうと思っているのですが、
8年前なので内容が古いのではないかと少し心配です。

この本は、今でも十分実用に耐えうる本でしょうか?

CGIプログラミング 第2版
http://www.oreilly.co.jp/books/4873110440/
343nobodyさん:2008/10/18(土) 20:18:21 ID:???
>>342
Windows95の入門書のようなもんだと思います。
344nobodyさん:2008/10/18(土) 20:18:42 ID:???
Perl自体がそろそろ古さが否めないような気がするけど、そうは思わないなら問題ないでしょ。
345nobodyさん:2008/10/19(日) 01:16:41 ID:???
CGIを介してファイルをダウンロードするプログラムを作っています。
それで以下のソースのように、「test.mp3」というファイルを「2008.01.01.mp3」という風にリネームしてダウンロードしたいのですが…

#!/usr/local/bin/perl

$fname = "2008.01.01.mp3";
$mime = "Content-type: audio/mpeg\n\n";

print "Content-disposition: attachment; filename=\"$fname\"\n";
open(FILE,"test.mp3");
print $mime;
binmode(FILE);
binmode(STDOUT);
print <FILE>;
close(FILE);


この方法だと、何故か「2008[1].01.01.mp3」という風に、間に[1]という文字が挿入されてしまいます。
ドットが2回続くとこうなるみたいですが…
ちなみにIEだけでこうなるみたいで、OperaやFireFoxでは問題なくダウンロード出来ました。

もしIEで正常にダウンロードする方法があれば、どなたか教えて頂いてもよろしいでしょうか?
よろしくお願い致します。
346nobodyさん:2008/10/19(日) 02:12:01 ID:???
ファイル名変えたほうがいい。変えて損はないと思うが?
347nobodyさん:2008/10/19(日) 02:14:25 ID:???
最後の.以降しか拡張子みないのに
キャッシュは最初の.までしかファイル名としてみてないのか・・・
やっぱりあほだな>IE
348nobodyさん:2008/10/19(日) 06:32:58 ID:???
ファイル名にドットとかスペースとかカンマとか演算子とか気持ち悪い

A-Za-z0-9_

な範囲でいこーぜ
349345:2008/10/19(日) 22:03:33 ID:???
>>346-348

どうもありがとうございます。
やはりIE特有のバグみたいですね・・・

Content-dispositionを使うと強制的にShift-JISになったりと、IE何か微妙すぎるよorz
今までの書式が2000.01.01のような形だったので、出来ればそのままが良かったのですが・・・
せっかくなんでファイル名を変えるようにしてみます。

皆様、どうもありがとうございました。
350nobodyさん:2008/10/24(金) 17:38:04 ID:gaOQS66Z
perl5.6.1 での utf8 の扱いについて質問です。(OSはlinux)
テンプレ >3 に[Perl5.8Unicodeメモ]がありますが、perl5.6.1ではどうすればよいのでしょうか?
(>3 [Perl5.8Unicodeメモ]の一番上はリンク切れのようです)

やりたいこと:データベース(euc)からデータを読んでutf8に変換してHTMLを出力する
やってみたこと:↓
---------------------
use strict;
use utf8;
use Unicode::Japanese;
use DBI;

(@list にDBからデータ取得)

print "Content-Type: text/html\n\n";
print <<HTML;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>UTF-8 表示テスト</title>
</head>
<body>
<h1>UTF-8 表示テスト</h1>
<table border="1">
<tr><th>ID</th><th>データ1</th><th>データ2</th><th>データ3</th></tr>
HTML

(つづく)
351350:2008/10/24(金) 17:48:16 ID:gaOQS66Z
(つづき)

my $jcode = Unicode::Japanese->new();
my($id, $data1, $data2, $data3);

for (0..$#list-1) {
$id = $list[$_]->{id};
$data1 = $jcode->set($list[$_]->{data1}, 'euc')->utf8;
$data2 = $jcode->set($list[$_]->{data2}, 'euc')->utf8;
$data3 = $jcode->set($list[$_]->{data3}, 'euc')->utf8;
print qq|<tr><td>$id</td><td>$data1</td><td>$data2</td><td>$data3</td></tr>\n|;
}

print <<HTML;
</table>
</body>
HTML

exit;
--------------------------------------

これで(私が見る限り)問題なく動作しました。
DBのデータには機種依存文字も含まれているのですが、それも出力されました。
これでいいのでしょうか?
352350:2008/10/24(金) 17:51:40 ID:gaOQS66Z
補足
上のソースはutf8で書きました。
353y:2008/10/26(日) 01:17:05 ID:???
大手ECサイトのヨドバシドットコムが、サイトリニューアルから大規模な障害を3日間...
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=1220150877

506 :目のつけ所が名無しさん:2008/10/26(日) 00:47:20
大手ECサイトで、ここまで派手なリリース失敗は初めて見た。
エンジニア向けIT情報誌や関連サイトは、ぜひ取材して原因を明かして欲し
いは。
354nobodyさん:2008/10/26(日) 04:20:46 ID:???
へぇ、、最近珍しい気がするね。
ちゅか、お金を扱うサイト作るの怖い。
355nobodyさん:2008/10/26(日) 09:49:05 ID:???
いや、個人情報扱うだけでも怖いよ・・・
356nobodyさん:2008/10/27(月) 17:52:44 ID:???
冷凍みかん(http://ruby.ntn.org/fm/)というアンテナを使いたいのですが
ページによっては情報を取得できないことがあるようです。調べてみたところ
リクエストの成功判定がおかしいらしく、ページによっては代入したリクエス
ト結果の値が変わってしまう(?)みたいです。原因がよくわからないので
アドバイスをいただけたらと思います。よろしくお願いします。

use HTTP::Request;
use LWP::Parallel;
my $pua = new LWP::Parallel::UserAgent;
$pua->max_hosts(1);
$pua->remember_failures(1);
$pua->agent('HTTP Test Program 0.1');
my $site = {
method => GET,
url => 'http://www.w3.org/MarkUp/Drafts/',
# url => 'http://www.w3.org/',
};
my $req = HTTP::Request->new($site->{method}, $site->{url});
$req->{site} = $site;
print $req->as_string();
if (my $res = $pua->register($req)) {
print STDERR $res->request->url, "\n";
print STDERR $res->error_as_HTML;
}
my $entries = $pua->wait(300);
foreach (keys %$entries) {
my $res = $entries->{$_}->response;
print $res->code.":".$res->message."\n";
$res->request->{site}{response} = $res; # 代入
$res ? print "Success\n" : print "Fail\n"; # 代入元
$site->{response} ? print "Success\n" : print "Fail\n"; # 代入先
}
357nobodyさん:2008/10/29(水) 10:01:41 ID:???
Tripletailを使用しています。
下記のように前のページからPOSTデータを取得してTemplateに書き出したいのですが、
POSTのデータが受け取れません。
どう修正すればよいでしょうか?

#! /usr/bin/perl

use strict;
use warnings;
use Tripletail qw(/dev/null);
use CGI;

$TL->startCgi(
-main => \&main,
);

sub main {
my $t = $TL->newTemplate('template.html');
my $cgi = CGI::new();

#前ページからPOSTデータの取得
$a = $cgi->param('a');
$b = $cgi->param('b');

$t->expand(
STR => $a,
NUM => $b,
);
$t->flush;
}
358nobodyさん:2008/10/29(水) 17:52:23 ID:???
POSTが受け取れないんじゃなくて実行エラーになってないか?
359nobodyさん:2008/10/29(水) 18:33:23 ID:???
$a, $bは使うなと(ry
360nobodyさん:2008/10/29(水) 18:43:45 ID:???
Tripletailって使ったこと無いけど設定ファイル指定するとこ/dev/nullでいいの?
361nobodyさん:2008/10/30(木) 03:00:37 ID:???
activeperl使ってるときは
perlのパスは以下のとおりにするといいよ

#!C:/perl/bin/perl
362nobodyさん:2008/10/30(木) 09:23:45 ID:???
>>358
Tripletail::Template::Node#expand: the value for key [NUM] is not defined. (key [NUM] の値が指定されていません)

と表示されます。
363nobodyさん:2008/11/02(日) 21:06:44 ID:???
掲示板を作ろうかと思ってるんですが
datに書き込んだログデータを読み込む場合って
配列、変数、連想配列、
どれに読み込むのが読むのも吐き出すのも早いですか?
364nobodyさん:2008/11/02(日) 21:14:51 ID:???
スカラーが速いだろうけど差が出るにしても倍も違わないだろうし
一度の実行で何度も繰り返すわけじゃないからどうでもいいレベル

結論を言うと後で見てもわかりやすいようにバグの入り込む余地がないくらい手堅く書くのがいいかと
365nobodyさん:2008/11/02(日) 21:30:21 ID:Tjmw1r4y
ごめん、>>363は書き方が悪かったかも。
スカラー、配列、ハッシュ、
どれが掲示板のログデータを読み出し吐き出しすることに向いてますか?
って質問です。

>>364
なら配列の方が手軽でよさそうですね、ありがと
366nobodyさん:2008/11/03(月) 11:36:36 ID:???
DBD::SQLiteが楽な気もする
367nobodyさん:2008/11/03(月) 12:00:57 ID:???
個別のデータをテキストファイルとして抜き出すのに適さない
小規模掲示板レベルであればテキストファイルにしてインデックスを用意したようが扱いやすい
DB は確かに扱える人からすりゃ便利すぎて他の考慮の余地ないかもしれないが、全ての環境で DB が動いてる、導入されてると思うな。って思うんです。
368nobodyさん:2008/11/03(月) 20:35:21 ID:???
いや、SQLiteだからなぁ・・・
369nobodyさん:2008/11/04(火) 01:08:37 ID:???
カラムの変更があったとき面倒くさくない? >CSVテキスト
370nobodyさん:2008/11/04(火) 01:53:06 ID:???
タブ句切のデータを
data[335]->{'time'}
みたいに扱えるようにしてるからさほど苦労はない


ただ多岐に渡るデータの全文検索とかになると TSV の場合
数千件のデータすらタイムアウトになるから
全データを1つのファイルにまとめた検索用データを作ったりと、ソースがみすぼらしくなるw
371nobodyさん:2008/11/06(木) 02:33:06 ID:???
あー、そっか。
一行目をカラム名にして $index{'カラム名'}=左から何列目 といいきかせ、
次の行からは @hoge に split でそーにゅーして、
$hoge[$index{'カラム名'}] でいぢくれば、
表に変更があっても保守楽かなぁ。
372nobodyさん:2008/11/06(木) 07:50:45 ID:???
そんなことせずSQLiteにしたらいいのに、、
373nobodyさん:2008/11/06(木) 09:10:15 ID:???
>>372
レンタルサーバーの場合は何を使えばいい?
374nobodyさん:2008/11/06(木) 09:59:01 ID:???
いやだからSQLiteだってばwww
375nobodyさん:2008/11/06(木) 10:23:52 ID:???
SQLiteはサーバーを必要としない組み込みのDBだよ
376nobodyさん:2008/11/06(木) 11:15:22 ID:???
そこじゃなくて、モジュールインストールできんのかっつーとこじゃねーの?
377nobodyさん:2008/11/06(木) 12:29:12 ID:???
入ってるサーバ使えばいいじゃん。
今時mysqlとSQLiteくらいは使えるとこ結構あるよ
http://atpages.jp/

てかめんどくさいから好きなの使いなよ
http://atbb.jp/
http://atbbs.jp/
http://atchs.jp/
http://atpaint.jp/
http://rentalbbs.livedoor.com/
378nobodyさん:2008/11/07(金) 00:12:30 ID:???
>>376
適当な場所に置いてuse libで良くね?
379nobodyさん:2008/11/07(金) 00:27:13 ID:???
DBD::SQLiteはSQLiteはいってないとダメじゃ?
380nobodyさん:2008/11/07(金) 00:35:54 ID:???
Cのコンパイラだけあればファイル揃ってなかったっけ?
あとDBD::SQLiteよりDBD::SQLite::Amalgamation使ったほうがよくないか
それにしてもパッチあてないといけなかった気がするけど。
381nobodyさん:2008/11/07(金) 00:52:40 ID:???
>>379
要りません。ていうかDBD::SQLiteはperl用SQLite込です。
382nobodyさん:2008/11/07(金) 11:15:39 ID:???
仕事だと、既にレンタル鯖借りちゃってるんでここで、みたいなクライアントがたまにいる
鯖変更の交渉も含め、金額に見合った仕事をするようにしないとなぁ、と思う。
383nobodyさん:2008/11/07(金) 23:46:31 ID:???
ロリぽやさくらでもSQLiteくらい入ってるぜ?
384nobodyさん:2008/11/08(土) 00:04:00 ID:???
小さい会社でドメイン取得が流行ったころに借りてるところって、
Perlのverが5.6以下だったりするところけっこうあるんだよなぁ。
どちらにしても会社のサイトがロリポはないよね。名前的にw
385nobodyさん:2008/11/08(土) 00:28:47 ID:???
5.6以下って5.6ならいいじゃん。

まーPerl5ならなんとかなる。5未満は死んでくれ・・・
386nobodyさん:2008/11/08(土) 00:48:56 ID:???
SQLite の話が出てたので試しに使ってみた。
WindowsXP, ActivePerl 5.6.1

create table で失敗してるようなんだけど、どうやって調べればいいんだろう?

my $sql = <<'_SQL_';
CREATE TABLE test (
id integer primary key,
name
)
_SQL_
my $sth = $dbh->do($sql);

の実行後に

my $sql = sprintf "INSERT INTO %s (%s) VALUES(%s)", $table, keys %{$hashref}, (join ',', '?' x scalar(values %{$hashref}));
my $sth = $dbh->prepare($sql);
$sth->execute(values %{$hashref});

を実行すると、

DBD::SQLite::db prepare failed: no such column: name(1) at dbdimp.c line 268 at sqlite.pl line 41.
Can't call method "execute" on an undefined value at sqlite.pl line 42.

ってエラーがでる。
$hashref = {id => 1, name => "hoge"};
です。
387nobodyさん:2008/11/08(土) 00:56:12 ID:???
成形した$sqlを表示してみそ
388386:2008/11/08(土) 01:05:43 ID:???
ゴメン、 上のはなかったことにしてください。
keys %{$hashref} と (join ',', '?' x scalar(values %{$hashref})) は間違い。
389386:2008/11/08(土) 01:22:05 ID:???
これで出来た。
my $sql = sprintf "INSERT INTO %s (%s) VALUES(%s)",
$table, join(',', keys %{$hashref}) ,join(',', ('?') x scalar(values %{$hashref}));

ところで、データベースはどこに作成されるのですか?
スクリプトのあるディレクトリに dbname というファイルが作成されますが、サイズは 0 バイトです。
390387:2008/11/08(土) 01:28:36 ID:???
ハッシュの順番は保証されてないっしょ
391386:2008/11/08(土) 01:43:51 ID:???
>>387
keys で返ってくるキーの順番は保証されないけど、keys と values が同じ順番で返ってくるのことは保証されているのでは?
392nobodyさん:2008/11/08(土) 01:56:38 ID:???
keys, values, eachは同じ順番で返ってくるのが保証されてるから大丈夫
393nobodyさん:2008/11/08(土) 06:41:27 ID:???
しかし、>>386 とかみたら疲れるよなぁ。
複雑な演算をしないなら >>371 みたいに原始的なほうが扱いやすい。
394386:2008/11/08(土) 16:02:05 ID:???
DBはまだ使い慣れていないので、今はテキストファイルを >>371 のやり方か、
↓のやり方で扱ってます。

my @column = qw(id name);
my %data;
@data{@column} = split /\t/;
my $id = $data{id};
395nobodyさん:2008/11/08(土) 23:58:41 ID:???
細かいツッコミしちゃうと>>371だとぅまく扱えないんだけどねw
396nobodyさん:2008/11/09(日) 01:11:14 ID:tiuPBzgU
すいません。perlと直接関係ないんだと思うのですが、hotmialのアドレス帳のexportする際のcsvファイルを自動で取得したいのですが、
これはどうやったらできるのでしょうか?
mailaddressとパスワードが20セットあり、それのアドレス帳をPGで自動取得したいんです。

同じ事を経験された方いらっしゃいますか?
397nobodyさん:2008/11/09(日) 14:12:58 ID:???
>>395
何がうまく扱えないの?
398386:2008/11/11(火) 11:21:11 ID:???
再度質問なのですが、DBD::SQLite を使って作成したベータベースは、どこに存在するのでしょうか?
よろしくお願いします。
399nobodyさん:2008/11/11(火) 12:05:41 ID:???
connect 時のdbnameがファイル名
400386:2008/11/11(火) 12:18:50 ID:???
そんなん聞いてません
PATHがどこか聞いているのだよ
401nobodyさん:2008/11/11(火) 12:20:57 ID:???
だから自分で設定したとこだよ
書かなきゃカレントだろーが
402nobodyさん:2008/11/11(火) 12:21:59 ID:???
386はファイル名にはPATHも含まれていることがわからないバカか
403nobodyさん:2008/11/11(火) 13:37:01 ID:???
まあ386では処理能力の限界かもしれないw
404386:2008/11/11(火) 14:04:05 ID:???
カレントってどこから見てのカレントだよバカチン
それぐらいも書けないなら解答すんなチンカス
405nobodyさん:2008/11/11(火) 14:27:24 ID:???
もう放置の方向で
ここで答えたら「チンチン言ってたら答えてもらえた」と思ってまたそうするだろう。
406nobodyさん:2008/11/11(火) 14:54:42 ID:???
いきなり>>403を読んだのでCPUの話かと思ったw
407386:2008/11/11(火) 14:56:38 ID:???
簡単に偽者に踊らされるお前らがかわいいw
408486:2008/11/11(火) 20:48:30 ID:???
本物の386です。
>> 399 レスありがとうございます。

DB接続時のファイル名指定を間違ってました。
my $dbh = DBI->connect("dbi:SQLite:dbname:$mydb","","");

下のように修正したら、スクリプトと同じディレクトリに指定した名称のファイルが作成されました。
my $dbh = DBI->connect("dbi:SQLite:dbname=$mydb","","");
作成されたファイルをバイナリエディタで見るとテーブルの情報やINSERTしたデータも入ってました。
お騒がせしました。

ただ、最初の方法でもデータをINSERTできるし、SELECTするとそれまで入力したデータ(約10件)を取り出せます。
>>389 で書いたように dbname という名称のファイルが作成されているのですが、あいかわらず 0 バイトです。
このファイルはスクリプトを実行してデータをINSERTするたびにタイムスタンプが更新されます。
これは、どうなっているのでしょうか?
409V30:2008/11/11(火) 22:03:12 ID:???
頭の回転が遅すぎて、何言ってるか理解できないです><
410nobodyさん:2008/11/12(水) 09:47:34 ID:???
>>408
環境は?
実体は別のとこにあるのかもね
411nobodyさん:2008/11/12(水) 09:49:46 ID:???
ってWindowsXPか。
リンクでもVirtualStoreでもないな。
412:2008/11/12(水) 12:10:00 ID:DKrfzJ/y
内容をフラッシュして閉じてください
413:2008/11/12(水) 12:10:26 ID:DKrfzJ/y
そうすればたぶん
414:2008/11/12(水) 12:10:49 ID:DKrfzJ/y
データが書き込まれると思う
415nobodyさん:2008/11/12(水) 12:41:44 ID:???
Winじゃないけど同じようにやったらdbname:mydbみたいなファイルになったぞ
Winだと:はドライブ名の指定にしか使えないんじゃなかったっけ。
Eドライブにもファイルできてるかもな
416nobodyさん:2008/11/12(水) 13:23:26 ID:???
ヒント:NTFS ストリーム名
417nobodyさん:2008/11/12(水) 14:31:59 ID:???
ああ、確かに副次ストリームなら見えてるファイルの容量は変わらんわw
418nobodyさん:2008/11/12(水) 14:51:00 ID:???
そういうことかw
419Pentium:2008/11/12(水) 21:28:24 ID:???
386 です。

ストリームって初めて知りました。
lfnutils というのを使って調べてみたら、確かにストリームにデータが記録されていました。
バイナリデータのため、文字化けしている部分がありますが >>408 と同様のデータでした。
http://www.monyo.com/technical/products/lfnutils/

すっごく、スッキリしました。
みなさん、ありがとうございました。
420nobodyさん:2008/11/19(水) 17:11:01 ID:???
Perl初心者です。

TripletaiLを使用して、CSVにデータを追加出力がしたいです。
Tripletail::CSVとTripletail::Filter::CSVが有るようですが、
画面上には何も表示なく保存又は上書き保存がしたいです。

良い方法はありますでしょうか?
ご教授御願いいたします。
421nobodyさん:2008/11/19(水) 18:35:04 ID:???
Tripletail::CSVかTripletail::Filter::CSVを使えばいいんじゃないかとおもいます
422nobodyさん:2008/11/22(土) 20:18:49 ID:???
TripletaiL ってどうなの
423nobodyさん:2008/11/23(日) 20:39:20 ID:bs2lqy3V
my $hoge = new Hoge;

my $hoge = Hoge->new;

は同じですか?同じだとしたら何故二つの呼び方があるのですか?
424nobodyさん:2008/11/23(日) 20:41:59 ID:???
その2つの例文に関して言えば同じ。引数を渡そうとすると後者になるが、まぁ趣味。
で、何故かについてはLarry Wallに聞いてくれ。
425nobodyさん:2008/11/23(日) 20:47:43 ID:???
my $hoge= new Hoge, 1;

確かにこうやっても値渡らないね
426nobodyさん:2008/11/23(日) 21:03:39 ID:???
my $hoge = new Hoge (引数);
なら行けなかったっけ? 最近この書き方していないからうろ覚えだが。
427nobodyさん:2008/11/23(日) 22:14:26 ID:???
個人的にだけど、インスタンス実行するときは
$obj = new Hoge
ってして、メソッド実行するときは
$obj->something();
ってしてるな。
428nobodyさん:2008/11/23(日) 22:18:28 ID:???
perl (笑)
429nobodyさん:2008/11/24(月) 18:20:18 ID:???
>428
ウォール(笑)
430nobodyさん:2008/11/24(月) 21:27:28 ID:???
$obj = Hoge::newは?
431nobodyさん:2008/11/24(月) 21:35:16 ID:???
$obj= Hoge::newだと第一引数にHogeが渡らないから
$obj= Hoge::new('Hoge');にすればいいかもな
432nobodyさん:2008/11/25(火) 00:44:42 ID:???
前者でも普通に引数渡せるだろ…つか、渡せない訳ねえだろ > オレ。
確かめちゃったじゃんか。
ex.1)
use Data::Dumper ;
my $obj = new Data::Dumper [qw( hoge foo )];
print $obj->Dump ;
ex.2)
{
package Hoge ;
use Data::Dumper ;
sub new{ return bless { dat => \@_ }, shift ; }
sub echo{ print Dumper shift->{dat} ; }
}
my $obj1 = new Hoge q{hoge}, q{foo} ; $obj1->echo ;
433nobodyさん:2008/11/25(火) 00:54:37 ID:???
>>432は、>>424>>425に対するレスです。
434nobodyさん:2008/11/26(水) 12:05:49 ID:???
はじめまして。
特に、言語はPerlに限ったことではないんですが、CGIでソケットを使いた
いのです。

そこで質問ですが、レンタル・サーバーで、独自にポートを開くことは
可能でしょうか? 禁止されていて開けない可能性はありますか?
レンタルサーバー上で、CGIで独自にソケット/ポートを利用したプログ
ラミングの例はあるでしょうか?
435nobodyさん:2008/11/26(水) 12:08:28 ID:???
レンタルサーバでソケット通信許可してるところはまず無いと思ったほうがいいよ
436nobodyさん:2008/11/26(水) 12:09:40 ID:???
>>435
そう言うものですか?
437nobodyさん:2008/11/26(水) 12:10:58 ID:???
1人で占有するレンタルなら使えるかもしれん
438nobodyさん:2008/11/26(水) 12:35:57 ID:y5MzewIk
共有鯖は駄目と思ったほうがいい
1台まるごと借りるサーバーなら大丈夫だとは思うけど、そんなんだったら自鯖立てたほうがいいよ
(ちゃんと管理できるならね)
439nobodyさん:2008/11/27(木) 04:12:01 ID:???
有識者のみなさま、いろいろ調べたのですが、解決できないのでお力をお貸しください。

1: 自分はこういう事がしたい。
動的に作成されるpngの画像(具体的には株価チャート)をgifに変換したい
2: それでこんな風にやってみたが・・・
socketで画像を取得→imagemagickでgifに変換
3: こんなエラーが出て上手く行かなかった。
socketで取得した画像をimagemagickにどうやって渡せばいいか分からない
補足:
socketでの画像取得はできています(表示文を付けたらブラウザで見れました)
png→gif 変換はできています(テストイメージでできました)
tempイメージをサーバに作成しない方法で実現したいです(メモリ上で完結)

use Socket;

(省略)
画像取得処理

print "Content-type: image/gif\n\n";
while (<SOCKET>){print $_;}
↑テスト用表示文

(省略)

use Image::Magick;

$tempimage = Image::Magick->new();
$tempimage->Read($inimage);
↑ここでsocketのデータを渡したい
$tempimage->Write($putsam);

(終了)
440nobodyさん:2008/11/27(木) 07:58:39 ID:???
$image = Image::Magick->new;
open(IMAGE, 'image.gif');
$image->Read(file=>\*IMAGE);
close(IMAGE);
って公式にあるだろ…、それとファイルハンドルのなんたるかが
きちんと扱えればどうにかならないか?
441nobodyさん:2008/11/27(木) 23:22:00 ID:cBVqxC3+
だからメモリ上だけで完結したいと書いておるだろうにバカチンが
442nobodyさん:2008/11/27(木) 23:33:30 ID:???
BlobToImageでぐぐれ
443nobodyさん:2008/11/28(金) 00:37:03 ID:???
みなさまアドバイスありがとうございます。今帰ってきました。

おっしゃるとおり、ファイルハンドルの何たるかを知りません。
socketに格納されてるバイナリデータをどうやって変数に代入すればいいのか
わかりません。変数に代入できれば先に進めそうなのですが。

バイナリデータをBlob形式に変換できればBlobToImageでできそうですね。

今日、調べてみます。
444nobodyさん:2008/11/28(金) 02:13:22 ID:???
Image::MagickのReadにソケット突っ込んだら、例外吐いて落ちた。ワラタ。
BlobToImageが一番安全っぽい。
445nobodyさん:2008/11/28(金) 02:54:47 ID:???
>>441
$image->Read(file=>\*SOCKET);
メモリだけで完結するじゃん(落るらしいから意味ないけど)
446nobodyさん:2008/11/28(金) 02:59:50 ID:???
携帯からなんでいろいろ自信がないんだけど…

一旦ファイル作っちゃった方がサーバーに優しくない?って気もするけどなんでオンメモリ何だろ?

ファイルハンドルになっちゃえばImageMagickで処理出来るよね?
こんな感じのできなかったけ?

my $buff;
open my $fh,'+>',\$buff;
print $fh <SOCKET>;
seek($fh,0,0);#fseekだっけ?
447nobodyさん:2008/11/28(金) 08:12:17 ID:???
「オンメモリにあるもんを態々ファイルにして、それをオープンしてオンメモリにする」
方がサーバに不可が掛らんと主張してるんだぞ君は。


448nobodyさん:2008/11/28(金) 10:49:59 ID:f7u8ti6k
またメモリに読み込むのに DISK I/O 経由の処理を加えたほうが優しいのか?
いつの時代からメインメモリより DISK および DISK I/O の方が処理コスト安くなったの?
449nobodyさん:2008/11/28(金) 11:32:22 ID:???
量の問題だろ
450nobodyさん:2008/11/28(金) 12:22:28 ID:???
株式チャートのPNG画像なら、大きくても100kバイト程度だと思うが、
それで問題あるなら、Image::Magickを使用することから見直した方がいい。
451nobodyさん:2008/11/28(金) 13:23:12 ID:???
まだreadしてないんだからkernelがメモリ使ってるかもしれないけどperl的にはオンメモリじゃないよね?

ReadもBlobToImageもだめみたいだったので
SOCKETから一回取り出してperlでバッファリングして
imagemagickの中でもバッファリングして
と無駄が多いなと感じて書きましたが
言われてみてればたしかにたいしたサイズでもないですね
452nobodyさん:2008/11/28(金) 17:30:25 ID:f7u8ti6k
#!/usr/bin/perl -W

use strict;
use CGI::Carp qw(fatalsToBrowser);
use warnings;

use CGI;
use LWP::UserAgent;
use Image::Magick;

my $ua = new LWP::UserAgent;
$ua->agent('IE5');
$ua->timeout(10);
my $response = $ua->get("http://i.yimg.jp/images/evt/ramen2008/shop/2/shop_il01.gif");
my $data = $response->is_success ? $response->content : undef;

#if(defined($data)){
# print "Content-Type: image/gif\n\n";
# print $data;
#}

my $image = new Image::Magick;
$image->BlobToImage($data);

print "Content-Type: image/png\n\n";
print $image->ImageToBlob(magick => 'png');
453nobodyさん:2008/11/28(金) 19:56:27 ID:???
439です。

452さんの回答で出来てしまいましたね…。すごいです。

my $data = $response->is_success ? $response->content : undef;
↑の部分をSOCKETで実現する方法を実装できなくて悩みまくりました。

(SOCKET画像取得処理)
my $data = SOCKETで取得した画像
↑を実装する方法は引き続き勉強します。
454nobodyさん:2008/11/28(金) 19:59:50 ID:???
無理にSOCKET使わなくても…
455nobodyさん:2008/11/28(金) 20:16:09 ID:???
>無理にSOCKET使わなくても…
まあ、そうなんですよね。

SOCKET使える環境で必ずLWPを使えるのであれば(よく知りませんが…)、
ほとんど意味ないですね。処理性能面でSOCKET優位等の理由がない限り。

みなさまのおかげでやっと実現できました。ありがとうございます。
456nobodyさん:2008/11/29(土) 22:46:07 ID:???
キチガイ回答者のグダグダがたまらんスレだなw
457nobodyさん:2008/11/30(日) 01:47:08 ID:???
439です。みなさんのおかげでpng→gifはうまくいきましたが、
設置方法で分からないことがあります。

今回作成したPerlのCGIをpng2gif.cgiとして、
urlをパラメータとし、以下のように出力します。
print "Content-Type: image/gif\n\n";
print $image->ImageToBlob(magick => 'gif');

htmlに
@<img src="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS">
と記述すれば問題なく動きます。

が、SSIとして記述する場合、どうすればよいのでしょうか?
A<img src="<!----#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"-->">
B<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"-->

Aは<img src ="">となりNG
Bはバイナリデータがそのまま出力(GIF89a〜文字化けの羅列)されてNG

Bはcgi側でgif形式で出力しているので理解できるのですが、@とAで動きが違うのはどうしてなのでしょう?
SSIとしてこのcgiを動かすにはどうすればよいのか分かりません…。
458nobodyさん:2008/11/30(日) 02:09:05 ID:o6oyERaL
まずね、○に数字の文字は使わないように

(3) は src には PATH であったり URL を指定すべきところにバイナリを出力してるから

(2) は t?s の部分をエスケープしてみたり、<!---- をちゃんと書き直してみたりしたらどうでしょう?
459nobodyさん:2008/11/30(日) 02:54:50 ID:???
ご指摘ありがとうございます。以下のように記述しました。

(0)<img src="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"><br>
(1)<img src="<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"-->"><br>
(2)<img src="<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t?s=000001.SS"-->"><br>
(3)<img src="<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t\?s=000001.SS"-->"><br>
(4)<img src="<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t\?s=000001.SS"-->"><br>
(5)<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t?s=000001.SS"--><br>
(6)<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t?s=000001.SS"--><br>
(7)<!--#include virtual="png2gif.cgi?http://chart.cn.yahoo.com/t\?s=000001.SS"--><br>
(8)<!--#include virtual="png2gif.cgi\?http://chart.cn.yahoo.com/t\?s=000001.SS"--><br>

結果
(0)正しい画像が出力される
(1)<img src="GIF89a〜文字化け〜"><br>
(2)<img src="[an error occurred while processing this directive]"><br>
(3)<img src=""><br>
(4)<img src="[an error occurred while processing this directive]"><br>
(5)GIF89a〜文字化け〜<br>
(6)[an error occurred while processing this directive]<br>
(7)<br>
(8)[an error occurred while processing this directive]<br>

タグ内にSSIを埋め込むことができないのでは?と思いましたが、結果を見ると問題なさそうです。
img srcのパラメータにバイナリデータをそのまま書いてしまっているように見えます。
img srcへの渡し方(ファイルを示すURL?)に問題がありそうです。難しい…。
460nobodyさん:2008/11/30(日) 12:17:00 ID:???
HTMLは画像バイナリデータを解釈できないから、
img要素などを経由させるしかない。

つか、(0)をSSIに書いとけばいいんじゃないのか?
461nobodyさん:2008/11/30(日) 12:33:15 ID:???
test.cgiを↓

#!/usr/bin/perl

print "Content-Type: text/html\n\n";
print "<img src=\"png2gif.cgi\?http://chart.cn.yahoo.com/t\?s=000001.SS\">";

で、htmlに

<!--#include virtual="test.cgi"--><br>

で表示できました。
後だしで申し訳ないのですが、ssiでやりたかったのはhtmlソース上にcgi名を
表示させたくなかったという理由があります。

png2gif.cgiの方をいじらないとだめそうですね。ありがとうございます。
462nobodyさん:2008/12/05(金) 20:58:52 ID:???
> まずね、○に数字の文字は使わないように

なんで?
463nobodyさん:2008/12/05(金) 21:29:37 ID:???
>>462
バカにいちいち構わずほっといてやれよw
464nobodyさん:2008/12/06(土) 00:31:10 ID:???
変なことをしていないかぎり、モジュール内のメソッドで、
newのみがクラスメソッドで、それ以外のメソッドがインスタンスメソッドだと思って間違いないでしょうか?
465nobodyさん:2008/12/06(土) 01:12:27 ID:???
そんなルールはない
466nobodyさん:2008/12/06(土) 14:04:47 ID:nchXLVyQ
new aaa

と呼び出した時 aaa のなんのメソッドが呼ばれるの?

aaa->new は new が呼ばれてるのは分かるけど …
467nobodyさん:2008/12/06(土) 14:19:58 ID:???
#!/usr/bin/perl

package aaa;

use strict;
use warnings;

sub aaa {
warn "aaa::aaa";
bless {}, shift;
}

sub new {
warn "aaa::new";
bless {}, shift;
}

package main;

use strict;
use warnings;

aaa aaa;
468nobodyさん:2008/12/06(土) 14:26:33 ID:???
>>466
書き方が違うだけでnewを呼んでる。
new aaa ; # 間接オブジェクト記法
aaa->new ; # 直接オブジェクト記法
{ package Foo ; sub new { bless {}, shift } sub get { "hoge\n" } }
print Foo->new->get ; # 直接
これを間接で書くと
print +( get { new Foo } ) ;
469nobodyさん:2008/12/06(土) 14:55:41 ID:???
470nobodyさん:2008/12/07(日) 00:51:48 ID:5kiTreoU
なるほど
明示的に書いてやるかどうかの違いなワケっすね
471nobodyさん:2008/12/08(月) 22:17:51 ID:H0AbHxek
質問です。

$mail = "[email protected]"

$mailから文字列 foo と @mail.com を抜きだすにはどうしたらいいでしょうか?
472nobodyさん:2008/12/08(月) 22:26:41 ID:???
my ( $user, $addr ) = split /(?=@)/, $mail
473nobodyさん:2008/12/09(火) 00:53:33 ID:1e6/3LhQ
\@ で大丈夫しゃない?
474nobodyさん:2008/12/09(火) 01:59:53 ID:???
@mail.comじゃなくてmail.comでいいならね
475nobodyさん:2008/12/09(火) 06:21:12 ID:???
そもそもこれ、
$mail = '[email protected]';
と書かないとダメだろ。俺も前に嵌ったことあるw
476nobodyさん:2008/12/09(火) 11:16:40 ID:1e6/3LhQ
@ が1つしか存在しないであろう文字列を split してるんだから
分離後の後者側には @ はいらないでしょ

それに分離するってことはホスト名が欲しいワケだよね?
だったら @ は邪魔なゴミじやない?
477nobodyさん:2008/12/09(火) 11:18:20 ID:???
use strict してなかったお前がバカだw
478nobodyさん:2008/12/09(火) 14:29:32 ID:D4e6X4gI
>>472
できました!
ありがとうございます
@も含めて抜きだしたかったんです。
479nobodyさん:2008/12/09(火) 23:43:03 ID:ope7KV64
hello worldを表示するcgiを作りたいのですが
本や入門サイトをあちこち見ても書き方が違うのです。
こちらの常連様方はどのように書いてますか?
480nobodyさん:2008/12/09(火) 23:52:30 ID:???
print q aHello worlda
481nobodyさん:2008/12/10(水) 00:34:49 ID:???
@echo off
echo content-type: text/plain
echo.
echo Hello World


これで出る
482nobodyさん:2008/12/10(水) 11:16:18 ID:???
>>479
色んな書き方があると分かったなら、それも進歩のひとつです。
483nobodyさん:2008/12/10(水) 11:51:10 ID:???
その書き方だとhtmlで出力したことにならないね
484nobodyさん:2008/12/10(水) 12:11:54 ID:???
>echo.
この . 忘れると、echoはoffです。が出るんだよなw
485nobodyさん:2008/12/11(木) 01:03:04 ID:???
whileの条件式に<FILEHANDLE>とすると$_に暗黙的に代入されますが、
IO::Fileみたいなオブジェクトで$fh->getlineとしても$_に代入されません。
暗黙的に$_に代入させる方法はないでしょうか
486nobodyさん:2008/12/11(木) 02:02:51 ID:???
お前さんの言ってるgetline methodは恐らくIO::Handleのgetlineの事だろう。
で、お前さんの言ってる事がやりたくて、先人様がIO::Fileと言うラッパを生みだしたんだ。
use IO::File ;
my $fh = new IO::File;
if ($fh->open("< file")) {
while ( <$fh> ){ print ; }
$fh->close;
}
487nobodyさん:2008/12/11(木) 02:10:00 ID:???
継承してるからIO::Fileでgetlineも使えるんだね。
失敬。
488nobodyさん:2008/12/11(木) 02:22:01 ID:???
明示的に変数に入れないと気がすまない性格の俺からすると $_ を積極的に使いたがる人のスクリプトはなんかヤダw
489nobodyさん:2008/12/11(木) 09:11:50 ID:???
俺は$_で済むものをいちいち自前の変数つくって入れる人のスクリプトなんてだるくて嫌だなw
490nobodyさん:2008/12/11(木) 11:02:32 ID:???
プログラミング言語では明示的に宣言するのが普通だな
文字数制限があったBASICの時代ならいざ知らず
491nobodyさん:2008/12/11(木) 12:04:21 ID:???
他の言語無関係に。
シュワルツ変換とかで↓みたいなコードを曝されたらねえ、、、
my @foo
 = map { my $ref = $_ ; $ref->[0] }
  sort{ $a->[1] <=> $b->[1] }
  map { my $val = $_ ; my $ref = [ $val , length $val ] ; $ref ; }
  @bar
 ;
必要に応じて、適宜採用するのが良いと思うよ。
my @foo
 = map{ $_->[0] }
  sort { $a->[1] <=> $b->[1] }
  map { [ $_, length $_ ] }
  @bar
  ;
492nobodyさん:2008/12/11(木) 14:21:39 ID:???
>489
貴様、ラリー先生ですね!
493nobodyさん:2008/12/12(金) 13:44:42 ID:???
>>491
だからどうした?
494nobodyさん:2008/12/12(金) 18:35:52 ID:???
Perlの時代来てるのになんか盛り上がらんなぁ
495nobodyさん:2008/12/12(金) 20:03:18 ID:???
で、japタンはもういないの?
496nobodyさん:2008/12/12(金) 22:19:56 ID:???
入力した文字を音声化するモジュールってありますか?
497nobodyさん:2008/12/12(金) 23:14:49 ID:???
498nobodyさん:2008/12/12(金) 23:59:34 ID:t4dUYMwZ
文字の入れ替えをスマートに書きたいのですが。
たとえばABCという文字の1番目と3番目を替える場合

$hoge = "ABC";
$s1 = substr($hoge,1,1)
$s2 = substr($hoge,3,1)

499nobodyさん:2008/12/13(土) 00:01:31 ID:???
途中で送信してしまいました。

$hoge = "ABC";
$s1 = substr($hoge,1,1);
$s2 = substr($hoge,3,1);
substr($hoge,3,1) = $s1;
substr($hoge,1,1) = $s2;

で、できると思いますが、もっとスマートなやり方はないでしょうか?
500nobodyさん:2008/12/13(土) 00:20:33 ID:???
2行削ってみた

$hoge = "ABC";
$s1 = substr($hoge,1,1);
substr($hoge,1,1) = substr($hoge,3,1,$s1);
501nobodyさん:2008/12/13(土) 00:24:19 ID:???
スマートというのが行数少なくすることなら正規表現で
502nobodyさん:2008/12/13(土) 00:29:52 ID:???
$hoge =~ s/^(.)(.)(.)/$3$2$1/ ;

ちなみに君の書いたコードだとACB
503nobodyさん:2008/12/13(土) 00:42:46 ID:???
$hogeが三文字固定なら
$hoge = reverse $hoge ;
じゃなきゃ
substr $hoge, 0, 3, reverse substr $hoge, 0, 3;
ちゅー手も。
504nobodyさん:2008/12/13(土) 00:51:10 ID:???
>>501-503
深夜ありがとうございます。
文字数は非固定で、入替える文字もランダムですので、正規表現は無理そうです。

>>ちなみに君の書いたコードだとACB
確認せず書いてすみませんでした。
$hoge = "ABC";
$s1 = substr($hoge,0,1);
substr($hoge,0,1) = substr($hoge,2,1,$s1);
ですね。

もうちょっと考えてみます。
505nobodyさん:2008/12/13(土) 01:01:23 ID:???
正規表現ではムリでsubstrでは書けるコードっていまいちルールがわからんなぁ。。
506nobodyさん:2008/12/13(土) 15:58:49 ID:???
> Perlの時代来てるのになんか盛り上がらんなぁ

Perl が来た時代なんてあったのか?
507nobodyさん:2008/12/13(土) 19:27:09 ID:???
質問です。よろしくお願いします。
ttp://www.hamakin.net/search/my_page_rank.html
このツールみたいに演算中に「演算中」と出しておいて終わったら
結果を表示したいのですがわかりません。。

これみたいなキーワードチェックツールを作っていてツール自体は
作れそうなのですが、「演算中」表示が解決できず困っています。
本当は、「演算中」ではなく、「10位まで終了」「20位まで終了」
としたいのですが、どちらもさっぱりで。。
508nobodyさん:2008/12/13(土) 19:36:16 ID:???
それはperlの質問じゃないっぽいな。
だいたい、本当にそんな時間かかってるなら鯖の負担が大変だw
509nobodyさん:2008/12/13(土) 20:08:28 ID:???
my $hoge = "ABC";
substr($hoge, 0, 1, substr($hoge, 2, 1, substr($hoge, 0 , 1)));

無理に文字列で操作しなくても、配列で操作してもいいんじゃないか。

my @hoge = split //, $hoge;
@hoge[0, 2] = @hoge[2, 0];
$hoge = join('', @hoge);

実際の操作が一回ならアレだけど、複数回適用するなら配列の方が楽。
510nobodyさん:2008/12/13(土) 20:44:38 ID:???
507のツールは☆が回ってる間って10秒くらいだけど、サーバの負担って
すごいの?
レンタルサーバでやろうとしてたんだけど、迷惑かな。。
511nobodyさん:2008/12/13(土) 21:10:00 ID:???
ajaxじゃねーの
どうでもいいが
512495-500:2008/12/13(土) 21:25:19 ID:???
>>509
配列の案までありがとうございます。
substr($hoge,0,1) = substr($hoge,2,1,substr($hoge,0,1));
で一行にまとめたのですが、
substr($hoge, 0, 1, substr($hoge, 2, 1, substr($hoge, 0 , 1)));
なんて事までできるのですね。
どれが一番よいかベンチとって、使用したいと思います。
513nobodyさん:2008/12/13(土) 21:32:03 ID:???
507です。
ソースみるとjavascript使ってないんです。いっこも。
perlかどうかは分からないんですが。
「10位まで終了」「20位まで終了」 ってのは無理なのかな。。
514nobodyさん:2008/12/13(土) 22:44:05 ID:???
>>507
見たけど、本来直接結果を表示できるところを、演算中と表示させるだけのcgiを間にはさんでしばらく表示し、
metaタグで結果ページのcgiに移動しているだけのようですね。フォームデータはそのまま結果ページcgiに渡すと。
★が動くのはアニメgifでしたよ。ワンクリ詐欺の技法。
まともに経過を表示させる方法を書こうと思ったけど、板違いなのでやめました。Webprog板へどうぞ。
515nobodyさん:2008/12/13(土) 22:51:42 ID:???
>>514
いやいや、板は合ってるw
516nobodyさん:2008/12/14(日) 14:24:32 ID:???
507です。
514さま。感謝です!演算中表示はできましたです!
cgiをはさむってのは思いつきませんでした。
板違いでなければ、経過表示もお願いしたいのですが。。
あと、共有サーバでやるべきかどうか、どう思いますか??
517nobodyさん:2008/12/14(日) 17:10:12 ID:???
stringifyとかwantarrayってどこで定義されてるんですか?
後者はperldoc -fで出るけど前者は出ないしググっても全然情報がないす
518nobodyさん:2008/12/14(日) 17:26:46 ID:???
http://rbach.priv.at/2007/Perl-CHM/
ここにある chm とかサクっと検索できるし見てみるのどうよ

wantarray は、perlfunc に書いてあるね。
stringify は、各モジュールで勝手に文字列化するためのメソッド定義してるとかじゃね。
519nobodyさん:2008/12/14(日) 17:31:24 ID:???
>>518
ありがとうございます、探してみます。
stringifyはcatalystで $c->path_to('hoge/huga')->stringify とかしたときのが知りたかったのでcatalystのソース読んでるところでした
520nobodyさん:2008/12/14(日) 17:39:22 ID:???
package Catalyst に sub path_to があるところまではわかりましたか。
その path_to のなかでつかってる Path::Class::Dir, Path::Class::File に
それぞれ stringify メソッドが定義されているよ。
521nobodyさん:2008/12/14(日) 17:46:22 ID:???
今そこ読んでるところです。
依存モジュールが無いのでこの程度なら頑張れば読めそうっす
ありがとうございました。
522nobodyさん:2008/12/14(日) 17:48:41 ID:???
依存モジュール無いじゃなくてFile::Specとかありました><
523nobodyさん:2008/12/14(日) 18:06:05 ID:???
全部よもうとせずに必要なところを少しずつ読むといいかも。

あとは、初めて目にするモジュールがあれば、
CPAN で検索してみればいいんじゃないかと思う。
http://search.cpan.org/

死にゆく言語だががんがってくれ!
524nobodyさん:2008/12/14(日) 18:22:07 ID:???
死にそうなんじゃなくて枯れてるだけです><
525nobodyさん:2008/12/14(日) 18:45:13 ID:???
>>523
今後伸びていく言語は何だと思いますか?
526nobodyさん:2008/12/14(日) 19:46:28 ID:???
>>525
それスレチじゃね
527nobodyさん:2008/12/16(火) 13:59:20 ID:vcMtnNeb
URLの解析を行っているのですが、CGIにGETメソッドでパラメータを渡す場合、
以下のように "?" でURLとパラメータを区切ると思います。

http://server/path?name1=value1&name2=value2

しかし、あるサイトでは"?"を使わずに"/"が区切り文字になっているようです。

http://server/path/name1=value1&name2=value2

このような記法は普通に利用されるものでしょうか?
詳しく解説しているサイト(RFC)等がありましたら教えて下さい。
528nobodyさん:2008/12/16(火) 14:21:14 ID:???
mod_rewrite の範疇なので、鯖板の方で聞いてみては如何でしょうか?
529nobodyさん:2008/12/16(火) 14:25:49 ID:???
>>527
それPerl関係ない。
Webサーバでそーゆー風に処理している
530nobodyさん:2008/12/16(火) 14:30:11 ID:???
でも、何で区切り文字だけ変えるんだろう。折角なら、.htmlにした方がSEO対策としては良くね?
スレ違いスマソ
531nobodyさん:2008/12/16(火) 15:33:00 ID:???
>>527
例があやしすぎるが、、、
PATH_INFO使ってんじゃないの?
532nobodyさん:2008/12/16(火) 16:01:55 ID:???
>>527
PATH_INFO
533532:2008/12/16(火) 16:02:23 ID:???
ああ531見えてなかった申し訳><
534nobodyさん:2008/12/16(火) 17:47:44 ID:???
>>527
【Apache】mod_rewriteについて語るスレ
http://pc11.2ch.net/test/read.cgi/php/1023791370/

探せばどっかに答えがあるというか、ほとんどその類の質問しかないスレ。
535nobodyさん:2008/12/16(火) 20:34:45 ID:???
use overloadについて詳しく解説されているサイト、
もしくはoverloadを有効に使っているモジュールを教えてください。
536nobodyさん:2008/12/16(火) 21:24:29 ID:???
DateTime
537nobodyさん:2008/12/16(火) 21:26:06 ID:???
538nobodyさん:2008/12/16(火) 21:47:12 ID:???
>>535
使用例としては、Math::BigIntが面白いと思う。
539nobodyさん:2008/12/17(水) 14:11:43 ID:???
>>536-538
ありがとう。見てみる
540nobodyさん:2008/12/25(木) 22:41:08 ID:???
Web::Scraperで質問です。

http://www.google.co.jp/m?eosr=on&q=hoge&site=mobile&mrestrict=chtml&start=0&sa=X&oi=blended&ct=more-results
の、検索結果に引っかかったURLを抽出しようと、以下のコードを書きました。

my $url = 'http://www.google.co.jp/m?eosr=on&start=0&site=mobile&sa=N&mrestrict=chtml&q=hoge';
my $scraper = scraper {
  process '.padbottom a', "link[]" => '@href';
  process '.sftr a', "next" => '@href';
  result qw/link next/;
};

my $uri = new URI($url . $word);
my $scraped = $scraper->scrape($uri);

for my $u (@{$scraped->{link}}) {
  print "$u\n";
}

結果は、10件の検索結果に加え、「次の10件」と「PCサイトを見る」のリンクまで取れてしまいました。
検索結果のクラスは<div class="padbottom">で、「次の10件」と「PCサイトを見る」のクラスは<div class="sftr center">なのに、何故この余計な二つが取れるのでしょうか?
どうすればこの余計な二つを除いた結果が取得できますか?
541nobodyさん:2008/12/28(日) 03:49:15 ID:???
process '.padbottom .padbottom a', "link[]" => '@href';

って書けばよさそう。
いろいろ省かずに動くコードを gist に貼ってよ。
542nobodyさん:2008/12/30(火) 07:46:25 ID:???
cronで走らせてるperlスクリプトを、時々任意に走らせたいときがあって、
webブラウザにアドレスを入れて、CGIを直接叩いているのですが、HTMLを返さないので、
ちゃんと実行されるものの、当然500エラーになります。

シェルから走らせてるか、HTTPで走らせてるかを判別できるような環境変数などはありますか?
543nobodyさん:2008/12/30(火) 08:02:24 ID:???
$ENV{GATEWAY_INTERFACE}=~ /^CGI/ が真か偽か
544nobodyさん:2008/12/30(火) 08:11:45 ID:???
>>543
thx;
545nobodyさん:2009/01/11(日) 00:46:35 ID:???
1: 自分はこういう事がしたい。
携帯メールの添付ファイルをimagemagickで変換→送信元へ返信
2: それでこんな風にやってみたが・・・
A.メール受信してスクリプトを起動(実装済)
B.添付ファイルを抽出
C.添付ファイルをimagemagickで変換
D.変換後添付ファイルを送信元へ送信
(BCDは同一モジュール)
3: こんなエラーが出て上手く行かなかった。
Bの添付ファイルを抽出する処理において、ひとまず添付ファイルを出力してみようとしたところうまくいきません。
変更前(テンポラリファイルを作成するバージョン)はうまくいくのですが、$parser->output_to_core(1);にすると
うまく動きません(正常終了するけどファイルは作られない)。単純にoutput_to_core(1);とするだけではだめなのでしょうか?
#!/usr/bin/perl
use File::Basename;
use MIME::Parser;
my $parser = MIME::Parser->new
#$parser->output_dir('/tmp');  ←コメントアウト
$parser->output_to_core(1); ←追加
my $entity = $parser->parse(\*STDIN);
if($entity->is_multipart){
 $count = $entity->parts;
 for($i = 1; $i < $count; $i++){
  $path = $entity->parts($i)->bodyhandle->path;
  $filename = (fileparse($path))[0];
  open(FILE, "> /var/spool/mail/mail/$filename");
  print FILE $entity->parts($i)->bodyhandle->as_string;
  close(FILE);
 }
}

http://www.ksknet.net/cat28/mimeparser.html
546nobodyさん:2009/01/11(日) 23:01:08 ID:lrs+Aq7A
一行づつプリントしたいのに、一気に出てきます(><)
どうすればいいですか?

#!/usr/bin/perl

use strict;
use Win32::Clipboard;
$| = 1;

my $clip = Win32::Clipboard();
$clip = $clip->GetText();
foreach (split(/\n/,$clip)) {
print $_;
sleep 1;
}
exit;
547nobodyさん:2009/01/11(日) 23:10:54 ID:???
できたけど?
548nobodyさん:2009/01/11(日) 23:52:30 ID:lrs+Aq7A
えーそうですか…。
どうしてだろう。
549nobodyさん:2009/01/12(月) 00:50:30 ID:???
>546
\nでsplitしたんだからそりゃそーでしょう。

print "$_\n";
550nobodyさん:2009/01/12(月) 00:55:25 ID:???
$|って何だろと思ってperlvar見て検索に引っかからなかった。
何故かパイプが全角だった。,とか\は半角なのに。
perl-5.8.8-15.el5_2.1
551546:2009/01/12(月) 01:18:39 ID:???
>>549
ありがとうございます! 気持ちよく眠れます!
552nobodyさん:2009/01/12(月) 01:24:58 ID:???
Active Perl v5.10.0 Binary build 1004 の場合、無くても動いた。
バージョンによって違うのかねぇ。
553nobodyさん:2009/01/12(月) 01:27:12 ID:???
winなんて知らんけど、\nじゃなくて\r\nだとか
でも\rだけで改行されんのかな
554nobodyさん:2009/01/12(月) 01:55:27 ID:???
Win32::Clipboad経由では、改行が\x0d\x0aのまま渡ってきていたから、
splitかけても、各行の最後に\x0dが付いていた。

結果、左に復帰するけど、下にフィードしない。
ただし、1秒ごとに出力はされる。
という感じです。
555nobodyさん:2009/01/12(月) 10:07:30 ID:???
546です。みなさんのおっしゃる通りです。
指摘されたように、print "$_\n";で応えてくれたので、
\r\nでsplitしました。
556nobodyさん:2009/01/14(水) 11:55:48 ID:OW2Unehd
WinXP, ActivePerl5.8.8 です。
とある UFT-8 のファイルのデータを使って CSV ファイルを書き換えたいと思います。
そこで, まずCSV を読み込もうと
http://www.din.or.jp/~ohzaki/perl.htm#CSVwithCRLF
を参考に以下のソースを実行したのですが、何度やっても
「問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便をおかけして申し訳ありません。」
というエラーが出て終了してしまいます。
+++++ソース+++++
use utf8;
use Encode;
open(DATA, '<', $entry_data_file) or die "entry_data does not exist.";
while (my $line = decode('CP932', <DATA>)) {
$line .= decode('CP932', <DATA>) while ($line =~ tr/"// % 2 and !eof(DATA));
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
}
close(DATA);
+++++++++++++++++++
decode の仕方がいけないのでしょうか??
教えてください!!
557556:2009/01/14(水) 12:12:28 ID:OW2Unehd
CSVファイルのサイズは1MBくらいなので、
サイズが大きすぎるということではないと思うのですが、
何か分かれば教えてください!
558nobodyさん:2009/01/14(水) 12:37:25 ID:???
まず、CSV処理がない部分のみでの挙動はどう?
あとはbinmode(DATA)もやってみてはどうだろう。
EUCの場合も試してみては?
559nobodyさん:2009/01/14(水) 12:47:48 ID:???
$line .= decode('CP932', <DATA>) while ($line =~ tr/"// % 2 and !eof(DATA));

ここの行がだめな気がする
560nobodyさん:2009/01/14(水) 13:32:39 ID:???
その手のエラーって処理系のバグ踏んだかメモリ使い果たしたかぐらいだろ。
環境晒したほうがいいかもね。windowsっぽいメッセージなので俺は力になれ
んと思うけど。

558の言うようにbinmode使えというのは同意。IOレイヤ使った方がいちいち
自前でencode書くよりすっきりするよ。元のプログラムいじるとこも最小限に
なるし。
561nobodyさん:2009/01/14(水) 17:04:33 ID:???
5.8.8が無いので確証は無いけどメモリ使い果たしたエラーだと思う、多分。
562nobodyさん:2009/01/14(水) 17:10:52 ID:???
メモリ使い果たすようなコード書くんじゃねー粕
563nobodyさん:2009/01/14(水) 17:13:41 ID:???
俺なんて、レンタル鯖で3MくらいのCSVファイルをDB代わりに酷使してるけど、問題ないぜ
564nobodyさん:2009/01/14(水) 17:38:35 ID:???
ようはコードの書き方次第
565nobodyさん:2009/01/14(水) 18:25:51 ID:???
Perl6が都市伝説と聞いてやって来ました。
566nobodyさん:2009/01/14(水) 18:34:41 ID:???
>>556
デバッグしろ!!
567nobodyさん:2009/01/14(水) 19:02:59 ID:???
ダブルクォートがひとつ足りないだけで、永久ループになるんじゃないか?
OSがWindowsなら、ローカルで動かしてるか専鯖なんだろうし、
ファイルを全部読んでからText::CSV_XSで処理した方が楽だろう。
568nobodyさん:2009/01/14(水) 19:27:44 ID:???
たとえダブルクォートがひとつ足りても足りなくてもファイルエンドになればループ条件を
満たさずにループから抜けるだろ
569nobodyさん:2009/01/14(水) 19:32:15 ID:???
ああ、確かに。
呆けてた。
570nobodyさん:2009/01/14(水) 20:11:53 ID:???
while (my $line = decode('CP932', <DATA>)) {

これって decode の結果がループ条件でしょ?
ここを

while (my $line = <DATA>){
my $utf8str = decode('CP932', $line);

みたいに分けたほうが・・・

あと、<DATA> で回してるのに、その中で <DATA> で読み込むのはやめた方がいい

これは作り方が間違えてるとしか・・・
571nobodyさん:2009/01/14(水) 20:55:18 ID:???
わかって無い人が書いたらこうなりましたって典型例
572nobodyさん:2009/01/14(水) 21:10:32 ID:VxBaEqTh
パールイズフリーダム〜〜〜
573nobodyさん:2009/01/15(木) 05:26:19 ID:???
Active Perl 5.10では再現できず。
574nobodyさん:2009/01/16(金) 14:34:05 ID:???
Perlのバージョンが単に悪いのか
動作環境が悪いのか
都市伝説が原因か


謎は深まるばかりです。
575nobodyさん:2009/01/17(土) 23:31:05 ID:???
Perlは、「謎」という言葉でソースの悪さをごまかせる素敵な言語ですね!
576nobodyさん:2009/01/17(土) 23:48:40 ID:???
あるクラスの中で、他クラスのサブルーチンを定義することは可能ですか?
イメージ的にはこんな感じです。

package main;
sub Hoge::say_hoge = sub say_hoge {warn "hoge\n"}
Hoge::say_hoge();
577nobodyさん:2009/01/18(日) 00:35:38 ID:???
>>576
#!/usr/bin/perl -w
use strict;
package Foo;
sub Bar::speak { __PACKAGE__, ' says ', uc pop, "\n" }
package Bar;
sub Foo::speak { __PACKAGE__, ' says ', lc pop, "\n" }
package main;
print Foo::speak('FOO'), Bar::speak('bar');
__END__

ただしこんな事をしなければいけないようなら設計が悪い。
578nobodyさん:2009/01/18(日) 00:42:15 ID:???
モジュールは単体で簡潔するべきかと
579nobodyさん:2009/01/18(日) 00:42:29 ID:???
完結
580nobodyさん:2009/01/18(日) 02:00:40 ID:???
Sub::Install::install_sub({
code => sub {warn "hoge\n"},
into => 'Hoge',
as => 'say_hoge'
});
581nobodyさん:2009/01/18(日) 02:09:03 ID:???
>>577
サンプルありがとうございました。
582nobodyさん:2009/01/18(日) 14:33:21 ID:???
自由にやるならClass::MOP辺りが面白いと思う。
583nobodyさん:2009/01/18(日) 20:51:31 ID:???
>>577-578
おまえらの感想は求められていない。
聞かれたことだけに答えればよい。
584nobodyさん:2009/01/18(日) 23:39:26 ID:???
1.txtの中身
a
b
c

2.txtの中身
d
e
f
↓一行おきに2.txtの中身を挿入したい
a
d
b
e
c
f

先生教えて!
585nobodyさん:2009/01/19(月) 00:00:53 ID:???
use strict;
use warnings;

use FileHandle;

my $a = FileHandle->new("< a.txt");
my $b = FileHandle->new("< b.txt");

while (!$a->eof && !$b->eof) {
print $a->getline;
print $b->getline;
}
586nobodyさん:2009/01/19(月) 00:20:53 ID:???
FileHandle使わんでもできるだろwww
587nobodyさん:2009/01/19(月) 00:46:38 ID:???
> FileHandle使わんでもできるだろwww

FileHandle なり何なりを使わない場合の利点があれば教えて欲しい。
588nobodyさん:2009/01/19(月) 00:47:02 ID:???
>>585
あざす
589nobodyさん:2009/01/19(月) 00:52:38 ID:???
無駄に CPU 使うからイラネ
590nobodyさん:2009/01/19(月) 00:53:39 ID:???
>>589
先輩もっと華麗に仕上げて下さい!
591nobodyさん:2009/01/19(月) 01:02:16 ID:???
FileHandle使わない理由は分からんが、使わないならこんな感じかね

use strict;
use warnings;

open my $txta, '<', 'a.txt' or die 'not found a.txt';
open my $txtb, '<', 'b.txt' or die 'not found b.txt';

while (defined (my $ta = <$txta>) and defined (my $tb = <$txtb>)) {
  print $ta;
  print $tb;
}
592nobodyさん:2009/01/19(月) 08:55:47 ID:???
無駄に CPU 使うからいらないという理由をもってくると、
use strict; つけることすら無駄になるよね。
どうなのそれ。
593nobodyさん:2009/01/19(月) 09:02:22 ID:???
え、俺デバッグ終わったらstrict外すけど
594nobodyさん:2009/01/19(月) 09:08:59 ID:???
えぇええええええええええええええええええええええええっ!!
strictはプラグマだから負荷かからないと思ってたけど違うの?
数値的にどれくらい負荷になるの?
595nobodyさん:2009/01/19(月) 09:09:55 ID:???
3日後に読めないような汚いコードしか出てこないスレだし
use strict してなくてもかまわんかもしれんなw
596nobodyさん:2009/01/19(月) 09:21:58 ID:???
http://naoya.dyndns.org/~naoya/mt/archives/000892.html

以下コピペするよ

> ところで、気になるオブジェクト指向実装における Perl スクリプトの実行
> 速度ですが、Damian Conway 氏による『オブジェクト指向Perlマスターコー
> ス―オブジェクト指向の概念とPerlによる実装方法』の序章にこうあります。
>
> > 一般には、オブジェクト指向Perlによるシステムの実装は、それと等価の
> > 非オブジェクト指向実装よりも高速になることはなく、実際には比較して
> > 通常20〜50パーセントほど低速になる。
> > この数字はオブジェクト指向Perlから多くのユーザを遠ざけるほど十分に
> > 大きいかもしれないが、オブジェクト指向の設計面および実装面のそれを
> > 補うさまざまなり点を見逃すのは悲劇的である。
> > (中略)
> > 残念ながら多くの人は、「20〜50パーセントの低速化」という数字に惑わ
> > され、過去6か月間でプロセッサ速度が2倍になったにもかかわらず、何を
> > 意味しているか忘れがちになる。
597nobodyさん:2009/01/19(月) 09:28:43 ID:???
今 perl 使ってる人って、
(1) CGI を速度重視で修行のように書く perl
(2) Moose とか使う oop perl
のどちらかだと思う。

(1) で use strict なしとかだと首つるしかなくね?
598nobodyさん:2009/01/19(月) 09:34:37 ID:???
http://blog.livedoor.jp/dankogai/archives/50502585.html

世の中にはおかしな本もあるようでwww
599nobodyさん:2009/01/19(月) 09:37:37 ID:???
use strictなしで正しいプログラムを書ける人には不要らしい。

俺には無理。
600nobodyさん:2009/01/19(月) 09:44:29 ID:???
use strict 不要派って、
「趣味のプログラムだから、最悪バグっても構わない」
的なこと書いて逃げるよね。
どうしようもない奴らであることは確かだな。

馬鹿はおとなしくマークアップエンジニアとかやってればいいのにな。
601nobodyさん:2009/01/19(月) 11:17:25 ID:???
use strictしないで作ったショッピングカートで注文受けてるわw
602nobodyさん:2009/01/19(月) 12:00:06 ID:???
俺はKENT様が作ったショッピングカートを使ってる
603nobodyさん:2009/01/19(月) 12:03:05 ID:???
KENT って書くと笑いが取れると思ってる?
つまんないから馴れ合い irc で引きこもっとけよ。
604nobodyさん:2009/01/19(月) 12:25:52 ID:???
>>601
DBがプレーンテキストのカートシステムで注文受けてる
605nobodyさん:2009/01/19(月) 12:44:11 ID:???
>>604
もちろん同じですよw

客の個人情報もテキストだよな?
流石にhtaccessでアクセス制限は敷いているが
606nobodyさん:2009/01/19(月) 12:49:52 ID:???
htaccessで?
httpdから見えるところに置いてるのか
607nobodyさん:2009/01/19(月) 12:52:42 ID:???
>>605
売り上げ毎に個別のID付けて、売り上げデータだけサーバに残し、
個人情報は残さない。
個人情報+個別IDをメールで自分に送る。
608nobodyさん:2009/01/19(月) 13:11:12 ID:???
>>606
レンタル鯖なんだから、httpdから見えないところには置けない・・・と思う。
>>607
メールで個人情報送るのって、案外危ないのでは?
俺は客宛に自動送信するメールにも、住所とかは完全な形では書かないよ
609nobodyさん:2009/01/19(月) 13:14:35 ID:???
>>608
httpd から見えるところにデータ置いておく人のやることは矛盾だらけだということがわかった。w
610nobodyさん:2009/01/19(月) 13:17:35 ID:???
>>608

root
web
log

みたいなディレクトリ構造になってないの?
611nobodyさん:2009/01/19(月) 13:20:29 ID:???
>>610
確かにそんな感じだから、やろうと思えばできるのかなあ・・
612nobodyさん:2009/01/19(月) 13:23:40 ID:???
>>608
ヤフオクだって取引ナビはSSLではないしね
大量に抜き取られる心配は無いね
613nobodyさん:2009/01/19(月) 13:23:42 ID:???
>>611
> やろうと思えばできる

じゃなくて、できないのなら廃業するべき。
614nobodyさん:2009/01/19(月) 13:29:05 ID:???
レン鯖を使うところがそもそも間違ってるんだけど、安全な自鯖を立てる技術がない以上、
レン鯖を使うのが今の俺に取ってはベターだとは思ってる。
最悪、なにか事故が起こったら謝ってしまえばいいだけ。

本題に戻れば、カートをどんな方法で動かしてるかとか、内部仕様的なところは客には見えないから、
ちょっと見栄えのする画面だったら何でもいいんだよw

まあレン鯖だということは分かっちゃうことになるけど、そんなこといちいち調べて買い物しないでしょ?
615nobodyさん:2009/01/19(月) 13:32:35 ID:???
>>614
わざわざ負け犬表明しなくていいですよw
616612:2009/01/19(月) 13:36:00 ID:???
よく考えたら、メールは大概 SSL/TLS で暗号化されているか。
617nobodyさん:2009/01/19(月) 13:36:40 ID:???
> 本題に戻れば、カートをどんな方法で動かしてるかとか、
> 内部仕様的なところは客には見えないから、

どこかで配布されてるスクリプトをちょっといじっただけの程度なら
内部仕様バレバレでっせw

もうすでに流出してるかもわからんね。

クレカの大量不正利用がある日起こってみんな気がつくとw
618nobodyさん:2009/01/19(月) 13:37:21 ID:???
>>616
> よく考えたら、メールは大概 SSL/TLS で暗号化されているか。

デマですか?
619nobodyさん:2009/01/19(月) 13:38:54 ID:???
>>616
客のIDとパスワードが、何らかの理由で漏れたときに、注文時のメールアドレス変えて
第三者に漏れる可能性があるかなという理由なんだよ。
620nobodyさん:2009/01/19(月) 13:40:17 ID:???
>>617
スクリプトは1から自分で書いたよ。だから怪しいわけだけどw
クレカなんて扱わないよ、そこまで大規模なら、システムにも金かけるでしょ。
621nobodyさん:2009/01/19(月) 13:40:25 ID:???
低脳なウェブエンジニア(笑)の皆さんがいると聞いて飛んできました
622nobodyさん:2009/01/19(月) 13:41:33 ID:???
> クレカなんて扱わないよ、そこまで大規模なら、システムにも金かけるでしょ。

クレカ扱うと大規模なの?w
623612:2009/01/19(月) 13:49:40 ID:???
>>619
そーゆー事か。
うちは、会員制(登録制)にしていないから、IDもPASSも無い。

>>618
大概はいいすぎたか。うちはメールサーバーと自宅の間は大丈夫。
ttp://www.rhein-strasse.de/blog/2004/06/19/becky2-ssl-tls/
624nobodyさん:2009/01/19(月) 13:54:25 ID:???
>>623
でも常連客でも会員登録してくれない客はいるね。
弱小だから、信用されてないのは仕方ないけど。


でも、会員登録の有無は関係なく、個人情報がサーバーに残ってることを客は知らんわなw
625nobodyさん:2009/01/19(月) 13:57:51 ID:???
> でも、会員登録の有無は関係なく、個人情報がサーバーに残ってることを客は知らんわなw

客を馬鹿だと思ってるの?
キミは何も知らないようだから、クラックされるなり変な script 注入されるなりして痛い目にあえばいいと思う。
626nobodyさん:2009/01/19(月) 14:00:50 ID:???
そういえば、つまらない対策だけど、想定外の動作をしたときに、
店宛にエラーの内容をメール送信する機能つけてるわ
627nobodyさん:2009/01/19(月) 14:05:36 ID:???
> 最悪、なにか事故が起こったら謝ってしまえばいいだけ。

とか言う人が

> そういえば、つまらない対策だけど、想定外の動作をしたときに、
> 店宛にエラーの内容をメール送信する機能つけてるわ

そんな機能つけてどうするの?自信ないの?腰抜けなの?
628nobodyさん:2009/01/19(月) 14:11:06 ID:???
いままで気にしていなかったけど、
Amazonは余裕で個人情報+購入商品のメール送ってくるのなw
629nobodyさん:2009/01/19(月) 14:12:43 ID:???
>>614
なんで共有鯖の次が自鯖なんだよwwww
占有鯖は考慮無し?
630nobodyさん:2009/01/19(月) 14:18:38 ID:???
>>629
馬鹿すぎてうけるよなw
631nobodyさん:2009/01/19(月) 14:21:51 ID:???
ここまでおれの自演
632nobodyさん:2009/01/19(月) 14:26:19 ID:???
人格障害乙
633nobodyさん:2009/01/19(月) 14:28:12 ID:???
>>628
本当は住所は書いたメールを送りたい。間違えて入力する客がたまにいるから。
でも、住所を書くことのリスクを負うことを考えると、やっぱり書けないね。
間違えて入力する客が悪いんだし。
634nobodyさん:2009/01/19(月) 14:29:26 ID:???
> でも、住所を書くことのリスクを負うことを考えると、やっぱり書けないね。
> 間違えて入力する客が悪いんだし。

論理が一貫していませんよ。
635nobodyさん:2009/01/19(月) 14:29:56 ID:???
>>628
今までの流れ見ると
「アマゾンでさえやってるから、いいんじゃね?」
くらいの発言がほしい物だ。
636nobodyさん:2009/01/19(月) 14:41:05 ID:???
それから、オンラインショップのアドレス晒したうえで、
「クラックしてみろ」とか「保存してある個人情報抜けるなら抜いてみろ」とか
ほしいものだ。

結局小心者の腰抜けなんですね。わかります。
637nobodyさん:2009/01/19(月) 15:40:28 ID:???
・use strictする
・配布スクリプトは使わない
・プレーンテキストで保存しない
・ファイルならhttpdから見えないところに置く
・メールに個人情報は載せない
・事故が起こったら謝る

こんな感じにすればいいってことですか?
638nobodyさん:2009/01/19(月) 15:50:20 ID:???
・Winnyは使わない
639nobodyさん:2009/01/19(月) 15:50:35 ID:???
事故が起こったら適切な対応をする、だろ。
640nobodyさん:2009/01/19(月) 17:04:42 ID:???
・漏れた場合は5500円払う

を追加してくれw
ttp://slashdot.jp/article.pl?sid=07/12/15/0035257
641nobodyさん:2009/01/19(月) 17:42:20 ID:???
>>637
間違ってる。
642nobodyさん:2009/01/19(月) 19:02:39 ID:???
FileHandleからここまでの脱線がウケる

みんなバカなのか?わざとだろ?
643nobodyさん:2009/01/19(月) 20:24:49 ID:???
自鯖スレだと思って呼んでたらPerlスレだった・・・
644nobodyさん:2009/01/19(月) 20:44:17 ID:???
まあ過疎スレだから、枯れ木も山の賑いて事で
645nobodyさん:2009/01/19(月) 20:47:03 ID:???
>>644
ここより過疎で雑談に適したスレは他にも沢山あるから
自由にリサイクルしてくれ。

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

コレカラWebProgオ勉強シヨウトシテル香具師ガ雑談スルスレ
http://pc11.2ch.net/test/read.cgi/php/1049476765/
646nobodyさん:2009/01/20(火) 01:15:18 ID:???
何この流れw

中級者向けの本を教えてくだしあ。基礎やcpan巡りはできるようになったけど、その先、みたいな。
647nobodyさん:2009/01/20(火) 01:30:22 ID:???
lestrrat さんの本とか薦める予定調和ですか
648nobodyさん:2009/01/20(火) 01:41:50 ID:???
サーバーAとサーバーB間でデータを投げたり、レスポンスを返して貰ったりするようなものを作るとき
皆さんだったらどんなのを使います?

自分は今、SOAPとかってどうなんだろう?と思ってるしだいです。
最悪返すデータが格納されてるURLを投げる方向だったりしますがw
649nobodyさん:2009/01/20(火) 02:01:04 ID:???
>>646
添付ドキュメントをじっくり全部読む
650nobodyさん:2009/01/20(火) 04:10:49 ID:???
>>648
ジョブキューとか API とかについて調べてみればいいと思う。
651nobodyさん:2009/01/20(火) 06:07:59 ID:???
>>648
勝手にやっていいなら、RESTでもJSONPでも。
652nobodyさん:2009/01/20(火) 20:20:07 ID:???
納品時にはstrictもwarningsも外すよ
653nobodyさん:2009/01/21(水) 03:44:02 ID:eckl057E
#!/usr/bin/perl
{
    package Hoge;
    use strict;
    use warnings;

    sub sub1 { print "sub1\n" }
}

{
    package main;
    use strict;
    use warnings;

    no strict 'refs';

    my $hoge1 = *{"Hoge::sub1"};
    $hoge1->();

    my $class = 'Hoge';
    my $hoge2 = *{"$class::sub1"};
    $hoge2->();
}

# 前者が上手くいき、後者が上手くいかない理由と、
# 後者の代替となる方法を教えて頂けないでしょうか?
654nobodyさん:2009/01/21(水) 04:53:39 ID:???
> 納品時にはstrictもwarningsも外すよ

そして馬鹿 perler と呼ばれるわけですね。
655nobodyさん:2009/01/21(水) 07:48:32 ID:???
>>653
my $hoge2 = *{"${class}::sub1"};
理由はエラーメッセージ読め。
656nobodyさん:2009/01/21(水) 09:03:09 ID:???
出社前に

my $hoge2 = *{"$class\::sub1"};
657nobodyさん:2009/01/21(水) 10:38:00 ID:dhsSLEKy
utf8の文字が半角か全角かを判別するにはどのようにしたらよいのでしょうか?
658nobodyさん:2009/01/21(水) 10:43:42 ID:???
あんぱっく すりゃわかるさ
659nobodyさん:2009/01/21(水) 12:20:19 ID:???
>>657
正規表現なら、\p{ASCII}でマッチさせるとか。
660nobodyさん:2009/01/21(水) 16:59:05 ID:???
ActivePerlで起動中のアプリケーションを終了させる事はできますか?
661660:2009/01/21(水) 17:03:30 ID:???
やりたい事は起動中のアプリケーションの設定ファイルを
書き換えて、そのアプリを再起動させたいのです。
662nobodyさん:2009/01/21(水) 17:33:53 ID:???
Windows であれば、Win32API を扱えるモジュールがあるので、SendMessage を指定アプリケーションに投げる方法が取れるかと思います。
663660:2009/01/21(水) 17:48:12 ID:???
検索結果から簡単に見つかると思ったら甘かった…。

>>662
検索キーワードありがとうございます。
664nobodyさん:2009/01/22(木) 09:37:23 ID:???
勉強の為にメールフォームを書いてみました。
掲示板に改造しようと思っているのですが、
さすがに素のまま設置するのはスパム投稿で酷い目に会いそうな気がします。
スパム投稿対策にはどういうのを施せばいいのか良くわかりません。
モダンなスパム対策にはどういうのがあるのでしょうか?
良ければ参考になるようなものをご教示お願いします。
665nobodyさん:2009/01/22(木) 10:21:48 ID:???
画像認証
ssl
666nobodyさん:2009/01/22(木) 10:31:08 ID:???
モダンなんて言ってる時点でアホだろ
667nobodyさん:2009/01/22(木) 10:57:51 ID:???
ぐぐれ
668nobodyさん:2009/01/23(金) 08:02:36 ID:???
ぐぐれ(笑)
669nobodyさん:2009/01/23(金) 13:40:01 ID:???
これを読めば、モダンなPerlが書ける

モダンPerl入門
http://www.amazon.co.jp/dp/4798119172/
670nobodyさん:2009/01/23(金) 15:30:04 ID:???
発売前の本ですよw
671nobodyさん:2009/01/23(金) 15:50:35 ID:???
perlでモダン焼きを作れますか?
672nobodyさん:2009/01/23(金) 16:25:33 ID:???
モダンモダン言いすぎてカスタマーサポートに飛ばされるやつとかいるから気をつけろよ
673nobodyさん:2009/01/25(日) 14:28:30 ID:???
おれはこのスレで一番モボだと言われた男
674nobodyさん:2009/01/26(月) 12:57:03 ID:???

 、        ヽ
 |ヽ ト、  ト、 ト、 、.`、
/|l. l. | |l l | | l |l.| |l. l
/' j/ ノ|ル'/レ〃j/l |
-‐7" ヾー---┐|_.j
 ̄   ./゙ニ,ニF、'' l _ヽ
::   ,.,. |ヽ 」9L.` K }.|
    l'  """  l ) /
  h、,.ヘ.      レ'/
          レ′
 r.二二.)     /  
  ≡≡    ,イ
.       / !
\   /  ├、
::::::` ̄´   /  !ハ.
675nobodyさん:2009/01/26(月) 18:15:16 ID:???
画像を取得→加工→表示させるプログラムを作ろうと思っています。
ググってみたんですが、ローカルの画像を加工して保存する方法ばかりで、
他のウェブサイトから画像を取得→加工→表示する方法がわかりません。

参考になるサイトでもいいので、どなたか教えてもらえませんか?
676nobodyさん:2009/01/26(月) 18:22:23 ID:???
(1)他のウェブサイトから画像を取得
(2)加工→表示
677nobodyさん:2009/01/26(月) 18:31:56 ID:???
要はHTMLがレンダリングされたページを画像として取得したいってことでおk?
678nobodyさん:2009/01/26(月) 18:35:41 ID:???
>>677
いえ、例えば、
ttp://〜.jpg、500*500
の画像を取得し、250*250にして表示したいと思っています。
679nobodyさん:2009/01/26(月) 18:39:29 ID:???
LWPとImagemagickでぐぐれ
680nobodyさん:2009/01/26(月) 18:50:54 ID:???
取得する方法と加工する方法と表示する方法がそれぞれわかれば組み合わせるだけだよ。
どれがわからんの?
681nobodyさん:2009/01/26(月) 18:55:35 ID:???
取得はLWPのget()でいいと思うんですけど・・・
加工と、表示の仕方がわかりません。
682nobodyさん:2009/01/26(月) 18:56:56 ID:???
getした画像はどこにあるんだよ馬鹿っ!!
683nobodyさん:2009/01/26(月) 18:57:01 ID:???
たしかこのスレでも似たの無かったっけ?

LWP で取得したイメージが内部でイメージに変換できなくて困ってるってやつで自分が回答した記憶がある

BlobToImage でググってみれば、取得から表示までのサンプルが出てくると思う
684nobodyさん:2009/01/26(月) 18:58:45 ID:???
>>677>>678とは一緒に仕事したくない
685nobodyさん:2009/01/26(月) 19:01:36 ID:???
まずは加工か。
GDもしくはImageMagickあたりかな
686nobodyさん:2009/01/26(月) 19:01:58 ID:???
>>683とは?
687nobodyさん:2009/01/26(月) 19:16:58 ID:???
>>683
このスレのリンクがいっぱい出てきたくらいで、参考になりそうなところはありませんでした・・・
688nobodyさん:2009/01/26(月) 19:33:13 ID:???
なに、宿題?それとも仕事?
689nobodyさん:2009/01/26(月) 19:38:47 ID:???
いえ、趣味です。
携帯用の2chビューア作ってて、画像リンクをサムネイル表示するオプションをつけたいと思いまして。
htmlのimgタグのサイズ変更だとうまくいかないんで・・・
690nobodyさん:2009/01/26(月) 20:07:04 ID:???
みなさんありがとうございました!
サンプルを見つけてちゃんと動いたので、これを改造して使いたいと思います。
691nobodyさん:2009/01/27(火) 16:25:45 ID:???
xhtml1.1のページをAtomフィードにして出力したいのですけども、
どういったモジュールを使うのがお薦めでしょうか?
692nobodyさん:2009/01/27(火) 22:59:06 ID:???
>>691
つ 自作モジュール
693nobodyさん:2009/01/28(水) 12:09:29 ID:???
XML::RPC
XML::Parser
XML::Atom
XML::Feed
etc
694sage:2009/01/29(木) 22:24:25 ID:kdy/+vR+
複数のプログラムを一度に起動したいのですが
execを使えばいいのか、systemを使えばいいのかすらわかりません。
exec("notepad");
system ('start "" "C:\WINDOWS\system32\notepad.exe"');
一つのプログラムであれば上記のような方法で可能なのですが。
どなたかご教授願います。
695nobodyさん:2009/01/29(木) 22:33:22 ID:???
systemを3つ並べれば3つ起動しね?
696694:2009/01/29(木) 22:41:07 ID:???
system("notepad");
system("notepad");
system("notepad");

こうすると1つ目の終了まで待機するようなのですが、
待機しないで3つ起動するにはどうすればいいでしょうか。
697nobodyさん:2009/01/29(木) 22:49:17 ID:???
旧式な人間だから、fork & exec使うかな。
モダンな方法はあるのだろうか。
698nobodyさん:2009/01/29(木) 23:01:27 ID:???
>>696
自分で>>694に書いてるけど
system("start", "notepad"); #これを3つ起動でしょ
699694:2009/01/30(金) 00:09:29 ID:???
>>698
上手くいきました!
試行方法が未熟でした…。
ありがとうございました。
700nobodyさん:2009/01/30(金) 00:30:25 ID:???
モダン(笑)
701nobodyさん:2009/01/30(金) 02:30:39 ID:??? BE:636768689-PLT(54324)
for (0..2) { system(1, "notepad"); }
702nobodyさん:2009/01/30(金) 03:11:15 ID:???
モダン(笑)
703nobodyさん:2009/01/30(金) 08:17:29 ID:???
本気でnotepadかよ!
たとえで出してたのかと思った。
704nobodyさん:2009/01/30(金) 08:21:33 ID:???
ところで、「モダン(笑)」って何かの流行?

705nobodyさん:2009/01/30(金) 17:44:58 ID:???
いや全然
706nobodyさん:2009/01/30(金) 21:40:46 ID:???
聴きなれない言葉を聴いてちょっとハイになってるだけでしょう
小学生によくあるようなアレ
707nobodyさん:2009/01/31(土) 02:50:44 ID:???
モダンモダン言いすぎてカスタマーサポートに飛ばされるやつとかいるから気をつけろよ
708nobodyさん:2009/01/31(土) 05:36:32 ID:???
モダン(笑)
709nobodyさん:2009/01/31(土) 05:59:42 ID:???
モダン(笑)
710nobodyさん:2009/01/31(土) 10:12:00 ID:???
ぼくの方がモダンだからぼくの方が偉い
711nobodyさん:2009/01/31(土) 10:41:36 ID:???
モダン(笑)
712nobodyさん:2009/01/31(土) 17:00:29 ID:???
パッケージ名に変数は使えますか?
package $name
とか
713nobodyさん:2009/01/31(土) 17:30:56 ID:???
パッケージが変数とかwww
714nobodyさん:2009/01/31(土) 20:28:20 ID:???
>>712
単刀直入すぎ。
それは出来ないけど、Sub::InstallとかClass::MOPとか、その辺使ってみるとか。

標準的なクラス型のオブジェクト指向では使わないから、そこは考えて使ってね。
715nobodyさん:2009/01/31(土) 20:50:36 ID:IExMyMgz
プログラムが美味く動かないのですがどうやら原因はサブルーチンが作動していないようです。
以下はプログラムの一部。

#サブルーチンの呼び出し
&aaa();
exit(0);
# サブルーチンの宣言と定義
sub aaa{
print "あいうえお";
}

716nobodyさん:2009/01/31(土) 20:55:59 ID:???
エラー内容をよく読むべし!
717nobodyさん:2009/01/31(土) 20:58:57 ID:IExMyMgz
直接サーバーで動かしているのでエラーは戻ってきません。
718nobodyさん:2009/01/31(土) 21:10:13 ID:???
>>717
まあ、まずは落ち着いて、君のPCにPerlを入れないか。
719nobodyさん:2009/01/31(土) 21:16:46 ID:???
・どういう風に直接サーバで動かしているのか
・どういう風にサブルーチンが作動していないことを確認したのか
まさかこのプログラムをa.cgiとかにしてCGIで実行しているんじゃないよな・・・?
720nobodyさん:2009/01/31(土) 21:18:18 ID:???
っとここはWebProg板だからその可能性が高そうだ
721nobodyさん:2009/01/31(土) 21:25:24 ID:IExMyMgz
>>719
そうです。
722nobodyさん:2009/01/31(土) 21:47:12 ID:???
>>721
初心者っぽいから言っておくが
サブルーチンの動作を省略せずにきちんと書いてみ
そしたらそのプログラムに何が足りないかすぐわかるはずだ。
723nobodyさん:2009/01/31(土) 22:22:12 ID:???
初心者こそ初めは省略せずに丁寧にプログラムを書くべきだと思うんだが
今時の人はそういう事をしないのカネ
724nobodyさん:2009/01/31(土) 22:58:38 ID:???
考えられるのは

- #!/usr/bin/perl のようなperlのパスを書いてない
- 実行権限がない
- web?? なら print "Content-type:text/html \n\n"; 的な記述がない

とかとか
725nobodyさん:2009/01/31(土) 23:50:05 ID:???
モダン(笑)
726nobodyさん:2009/01/31(土) 23:51:42 ID:???
つかfatalsToBrowswerでいんじゃね
727nobodyさん:2009/02/01(日) 00:24:54 ID:???
単純にルーチンから引き渡せてないだけだろwww
728nobodyさん:2009/02/01(日) 00:36:42 ID:???
>>727違うだろw

>>724のどれかじゃね?
エラー内容を書いてないし自分で解決するんだろ
729nobodyさん:2009/02/01(日) 02:37:45 ID:8RIm5Wux
Python始まったな
Python 3が後方互換性を捨ててでも求めたもの
ttp://www.atmarkit.co.jp/fcoding/articles/python3/01/python301a.html
730nobodyさん:2009/02/01(日) 03:03:40 ID:???
731nobodyさん:2009/02/01(日) 04:13:30 ID:???
>>730
日本では流行らないだろw
世界的にはすでに流行ってる
732nobodyさん:2009/02/01(日) 04:55:13 ID:???
ttp://ziddy.japan.zdnet.com/qa4086953.html
この状況と同じです。OSはXP、perlはv5.10.0です。
>ppm-shell
>install DBI
>install DBD-mysql
でパッケージが無くインストールできません。
>ppm でppmのGUI立ち上げてリポジトリ追加後にDBI,DBDと検索するとたくさん出てきます。
DBDで検索したのからDBD-mysqlPPだけインストールしました。
DBIで検索したのからよくわからないので大量ですが全部入れておきました。
○DBDはDBD-mysqlPPだけでよいですか?DBD-mysqlというのはなかったのでDBD-mysqlPP入れておきました。
○DBIはどれが必要なのでしょうか?
まだサンプルプログラムが動かない状態です。よろしくお願いします。
733732:2009/02/01(日) 05:20:39 ID:???
>ppm install DBI
Downloading ActiveState Package Repository packlist...not modified
No missing packages to install

>ppm install DBD-mysql
Downloading ActiveState Package Repository packlist...not modified
ppm install failed: Can't find any package that provides DBD-mysql

エラー内容貼らせていただきました。
DBIはインストールされているっぽいですか。
DBD-mysqlPPだけ入れればいいんでしょうか。。。
734732:2009/02/01(日) 05:44:24 ID:???
ttp://cpan.uwinnipeg.ca/PPMPackages/10xx/
ここに書いてあるコマンド直接書いてみたらできました。
>ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/DBD-mysql.ppd
サンプルプログラムも動きました。

リポジトリに追加したときURLが間違っていたので
DBD-mysqlが無かったのかもしれません。
735nobodyさん:2009/02/02(月) 10:41:30 ID:WfkTEh9p
すみませんvistaにmod_perlを導入したいのですが
ソースコードしか手に入らず困り果ててます
コンパイル済みのmod_perlはどこで入手できますでしょうか?
736nobodyさん:2009/02/02(月) 11:11:06 ID:???
ggrks
737nobodyさん:2009/02/02(月) 11:45:22 ID:???
>>736
シネカス
738nobodyさん:2009/02/02(月) 11:46:24 ID:???
>>735
ActivePerlなら、ppmを使ってUwinnipegのリポジトリから取れるよ。
http://perl.apache.org/docs/2.0/os/win32/install.html
739nobodyさん:2009/02/02(月) 12:10:46 ID:???
ググればすぐわかる内容をわざわざ掲示板で聞くとか頭悪過ぎ
740nobodyさん:2009/02/02(月) 12:45:35 ID:???
テンプレにこれでも入れとくか
http://www.y2sunlight.com/ground/?ActivePerl5.8%2F6.mod_perl
741nobodyさん:2009/02/02(月) 14:11:48 ID:???
> ググればすぐわかる内容をわざわざ掲示板で聞くとか頭悪過ぎ

ググって正しい内容に到達できるといいけどね。
古かったり、間違った情報だったりすることって多々あるよね。
ブログ書いてると分かると思うけど、pod とか他人からのコピペだったり、
試行錯誤してることを載せること多いよね。
その分野に疎かったら、古かったり、間違った情報だとしてもわかんないよね。
だから、知ってる人に質問したほうがいいと思うんだ。
742nobodyさん:2009/02/02(月) 14:33:05 ID:qwoAnWRh
print "content-type:text/html\n\n";の\nはなぜ2つ書かないとcgiとして動作しないのでしょうか?
743nobodyさん:2009/02/02(月) 14:39:45 ID:???
HTTP ヘッダが空行をヘッダとデータの区切りとして定義されてるから
744nobodyさん:2009/02/02(月) 14:48:06 ID:???
そういう意味があったんですね
\nがひとつだと500エラーになったのはそういうこだったんですね
ありがとうございました
745nobodyさん:2009/02/02(月) 16:35:52 ID:P7XLmGHa
何らかの原因でbuf1という変数が空になってしまうのですが

$buf1 = "$a[0]","&","$a[1]";

↑とりあえずこの表記は正しいでしょうか?
746nobodyさん:2009/02/02(月) 16:47:09 ID:???
$buf1 = $a[0] . "&" . $a[1];
747nobodyさん:2009/02/02(月) 17:03:56 ID:???
ありがとう^^
748nobodyさん:2009/02/02(月) 18:11:38 ID:???
$buf1 = join("&", @a); とかじゃないかもしかして
749nobodyさん:2009/02/02(月) 18:24:35 ID:???
Lingua::JA::kana というモジュールを使って
ローマ字をひらがなに変換しようとしています。
コマンドラインだと

$ perl -M'Encode' -M'Lingua::JA::Kana' -w -e 'print romaji2hiragana(@ARGV);' hogehoge(エンター)
Wide character in print at -e line 1.
ほげほげ

と表示されるのですが、

use strict;
use warnings;
use Encode;
use Lingua::JA::kana;
print romaji2hiragana(@ARGV);

という内容のスクリプトファイルをコマンドラインから実行すると

$ perl /Users/anon/Desktop/test.pl hogehoge(エンター)
Undefined subroutine &main::romaji2hiragana called at /Users/anon/Desktop/test.pl line 5.

と表示されてしまいます。
なぜスクリプトファイルの方は "Undefined subroutine" と
なってしまうのでしょうか?
750nobodyさん:2009/02/02(月) 18:41:51 ID:???
>>749
Lingua::JA::"k"ana は書き込み時のミスか?
751nobodyさん:2009/02/02(月) 18:45:54 ID:???
>>746
先生!動きません。
>>748
&で分割した処理の逆をやりたいのです。
752nobodyさん:2009/02/02(月) 19:05:10 ID:???
print encode("shiftjis", romaji2hiragana("aka"));

で Win コンソールででけたよ
753nobodyさん:2009/02/02(月) 19:13:08 ID:???
>>751
my @a = split(/&/, $xxx); したものなら >>748 で結合できる。
小出しにせずに、周辺のコードも晒すといいよ。

変数の様子が意味不明の時は、手当たり次第 Data::Dumper に食わせてみるといいよ。

use Data::Dumper;
warn Dumper($str);
warn Dumper(\@array);
warn Dumper(\%hash);
754nobodyさん:2009/02/02(月) 19:13:52 ID:???
普通に

my @a = qw( a1 a2 );
my $buf1 = $a[0] . '&' . $a[1];
print "\nbuf1 = $buf1\n";

でできないか?
755nobodyさん:2009/02/02(月) 19:34:09 ID:???
>>478さんの言うとおりにします。
しかし動かない理由も気になります周辺のコードです。

open(IN, "a.txt") or die;
read(IN, $a, -s IN);
my @pairs = split(/,/,$a);

@data = split(/&/,$pairs[0]);

if (data[1] == 12){@b = "3&@b";
$baf1 = $a[0] ."&". $a[1] ."&". $a[2]";

ちなみにこれです。これが動きません


756nobodyさん:2009/02/02(月) 20:00:19 ID:???
>>755
{ に対応する } がないし、変数とおぼしきところに $ とかがないので、
今のままだと動かないと思う。

use strict; をスクリプトの一番最初に書くと、文法チェックしてくれるよ。
どんな理由があろうとも use strict; をつけるのは perl の基本だから、
その上でがんばってほしいです。

出てきそうな質問に答えておくと、"" で囲まれた中に @ を含めたいときは
\@ にするか、"" をやめて '' でくくったりする。
757nobodyさん:2009/02/02(月) 20:03:10 ID:???
ありがとう御座いますがんばります。
758749:2009/02/02(月) 20:24:03 ID:???
>>750
おっしゃる通りでした。Lingua::JA::"K"ana に直したらちゃんと動きました。
典型的なケアレスミスでお恥ずかしいかぎりです。
最初 use kana; とだけ書いたときに出ていた Can't locate kana.pm in @INC
のエラーが、use Lingua::JA::kana; と書いたら出なくなったので、
この部分は通っているものと思い込んでいました。
ここできかなかったらずっとわからなかったと思います。
どうもありがとうございました。

>>752
わざわざ試していただいてありがとうございます。
そうすれば文字コードの指定も同時にできるんですね。
そちらを使わせていただくことにします。どうもありがとうございました。
759nobodyさん:2009/02/02(月) 20:36:37 ID:???
>>758
> 典型的なケアレスミスでお恥ずかしいかぎりです。

あんまり謙遜すると、キチガイにつけ込まれるよ。
760nobodyさん:2009/02/02(月) 21:17:04 ID:???
sub a{
&a
sub b{
}
}
このサブルーチンの使い方は間違っていますか?
761nobodyさん:2009/02/02(月) 21:28:52 ID:???
>>760
何をしたくてそう書いたの?
762nobodyさん:2009/02/02(月) 23:25:18 ID:???
Markdownのような記法からS5のようなスライドのHTMLを生成するモジュールをご存じであれば教えていただきたいです。
763nobodyさん:2009/02/02(月) 23:56:04 ID:???
>>761
見た目がわかり易かっただけですorz

764nobodyさん:2009/02/02(月) 23:58:27 ID:???
$a[1..9] = $b[1..9];
この記述はあってますか?

いったいどこが悪くて動かないのかわからないので総当り中。
765nobodyさん:2009/02/03(火) 00:00:23 ID:???
>>764
まあ、まずは落ち着いて、君のPCにPerlを入れないか。
766nobodyさん:2009/02/03(火) 00:09:30 ID:???
>>764
それ @a = @b; でできるよ
767nobodyさん:2009/02/03(火) 00:12:32 ID:???
>>766
インデックスの0だけを据え置いて配列の内容を交換したいのですorz
768nobodyさん:2009/02/03(火) 00:12:39 ID:???
@a = @b;

だと

@a[0..9] = @b[0..9];

になる気がする。

@a[1..9] = @b[1..9];

か。脳内だけど。
769nobodyさん:2009/02/03(火) 00:19:34 ID:???
@a = @b;
shift(@a);
unshift(@a, $b[0]);
770nobodyさん:2009/02/03(火) 00:57:59 ID:???
useするだけで色んなサブルーチンが使えるようになるモジュールって、全部use base "Exporter"してour @EXPORTにサブルーチン名代入する作りになってるんですか?
771nobodyさん:2009/02/03(火) 01:03:32 ID:???
Perlのスライスは分かりづらいよな。何で@にしたんだろ。
772nobodyさん:2009/02/03(火) 01:56:59 ID:???
a[0..9]が表すものはリストだから
a[0]ならスカラーだから$なのと一緒
773nobodyさん:2009/02/03(火) 02:11:03 ID:???
$ @ % & などは、変数とかを表すものでなく、
実は一貫してアクセスの種類示すものとして使われている。

$aaa; #「スカラー変数aaa」ではなくて「スカラー名aaaへのアクセス」

>>770
オブジェクトじゃなければ、だいたいそう。
ひねくれ作者だったら知らん。
774nobodyさん:2009/02/03(火) 08:12:43 ID:???
検索どころか、ちょっと試せば分かることをなぜ試さないのか。
質問者は>>1を熟読した上で、質問してほしい。
775nobodyさん:2009/02/03(火) 14:14:36 ID:???
>>774
そんな風に煽るから、やる気なくすんじゃないの。
776nobodyさん:2009/02/03(火) 14:17:47 ID:???
>>774
答えたい人が答えればいいだけだから、
スルーしろよ。
777nobodyさん:2009/02/03(火) 14:40:43 ID:???
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
778nobodyさん:2009/02/03(火) 15:52:49 ID:???
>>777
荒らすな>>774
779nobodyさん:2009/02/03(火) 16:38:22 ID:???
>>773
それ本読んだ事ある人なら知ってる内容だよね
780nobodyさん:2009/02/03(火) 19:46:43 ID:???
@a = shift(@a) ;
unshift (@a , 1) ;

この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?
781nobodyさん:2009/02/03(火) 19:55:35 ID:???
店長、ネタレス>>780入りました。
782nobodyさん:2009/02/03(火) 20:55:27 ID:???
perlは実は無料です。ソースも公開されています。
783nobodyさん:2009/02/03(火) 20:57:12 ID:???
オープンソースだからねぇ
784nobodyさん:2009/02/03(火) 21:29:51 ID:???
>>780
> この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?

use strict;
use warnings;

の 2 行を、perl スクリプト全部の先頭に付けると、
記述があってるかどうかおしえてもらえるよ。

Windows に入る perl は、ActivePerl というのと Strawberry Perl の
2 つがあるよ。
785nobodyさん:2009/02/03(火) 21:35:22 ID:???
Windowsで使用している人のほとんどがActivePerlだと思う
786nobodyさん:2009/02/03(火) 21:38:31 ID:???
windowsで鯖公開してる人が多いのか?
787nobodyさん:2009/02/03(火) 23:31:26 ID:???
Windowsで開発しても、運用まではやらないんじゃないか。
788nobodyさん:2009/02/04(水) 00:12:55 ID:???
開発は本番の環境に似せた環境で作るから
Winで使わないならWinで開発しないだろ、jk
789nobodyさん:2009/02/04(水) 00:28:31 ID:???
開発、運用にwindowsを選ぶ理由がわからん
790nobodyさん:2009/02/04(水) 00:30:49 ID:???
昔からWin鯖で動いてたシステムなら改修で弄った事あるけど
弄った後にWin鯖は入れ替えでRHELに入れ替わってたな
791nobodyさん:2009/02/04(水) 01:09:23 ID:???
今はvmwareとかcolinuxがあるからなあ。
792nobodyさん:2009/02/04(水) 01:24:33 ID:???
実機用意しなくて済むようになったのは良い事
793nobodyさん:2009/02/04(水) 03:05:51 ID:???
0chのtest060227.zipを使用して掲示板を運営しています。
http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。

varda.plの191
sub CreateSubback{ } 内に

require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);

151# HTMLヘッダの出力
$Caption->Print($Page,undef);

他に
sub META{
 my ($this,$Page,$Caption) = @_;
 my ($title,$link,$image,$code);
 $Caption->Load($this->{'SYS'},'META');
}


ミスはないでしょうか?
794nobodyさん:2009/02/04(水) 04:42:54 ID:???
>>793
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
795nobodyさん:2009/02/04(水) 05:07:43 ID:???
>>793
>ミスはないでしょうか?

動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
796nobodyさん:2009/02/04(水) 05:15:04 ID:???
>>794
移動します。
797nobodyさん:2009/02/04(水) 07:09:52 ID:???

@a = @b
shift(@a) ;
unshift (@a , 1) ;

この表記でバグってるような気がします


ちなみにjperl日本語版をベクターでダウンロードしましたがインストーラーが見当たりません。
ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
798nobodyさん:2009/02/04(水) 11:33:59 ID:???
a とか b だけの変数名は使うなバカチン

unshift(@a , 1);
第二引数は配列でアレ!
799nobodyさん:2009/02/04(水) 21:14:31 ID:???
>>797
> この表記でバグってるような気がします
http://www.e777.co.jp/perlcw/perlcw.html

> ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
http://www.activestate.com/activeperl/
800nobodyさん:2009/02/04(水) 23:10:49 ID:???
ぜろちゃんねるスクリプト use strict; すらしてねぇ
801nobodyさん:2009/02/05(木) 07:17:41 ID:???
strict.pmが鯖に必ずしも入っていなかったからだと思うよ
802nobodyさん:2009/02/05(木) 09:39:18 ID:???
弄られるってのも考えてると思う
803nobodyさん:2009/02/05(木) 10:22:36 ID:???
>>801
> strict.pmが鯖に必ずしも入っていなかったからだと思うよ

そういう鯖って今もあるの?
あるとして使う積極的な理由は見つからない。
use strict; しないスクリプトは消えるべきかと。
804nobodyさん:2009/02/05(木) 10:33:23 ID:???
世の中そう簡単じゃないんだよ
805nobodyさん:2009/02/05(木) 10:37:35 ID:???
作る時は
-Tオプション
use strict;
use warnings;
つけるけど、納品するときは外すよ
806nobodyさん:2009/02/05(木) 11:13:47 ID:???
>>805
どういう理由があって外してるの?
807nobodyさん:2009/02/05(木) 11:20:17 ID:???
>>806
納品前に外す趣旨の発言は、この板で何度か出てきてるね。
外すと書くだけで、合理的な理由を示さない人だから、構わない方が良いよ。
808nobodyさん:2009/02/05(木) 11:34:34 ID:???
>>807
>>801
可能性がゼロじゃないわけで。
ログはきまくるっていうのもあるのかな
809nobodyさん:2009/02/05(木) 12:05:01 ID:???
>>808
Perl で飯食うの辞めるといいと思う。
810nobodyさん:2009/02/05(木) 12:15:13 ID:???
0chのtest060227.zipを使用して掲示板を運営しています。
http://0ch.mine.nu/public/scripts/
スレッド一覧( ./subback.html )にもmeta.txtの内容を書き込もうと思い
いろいろ弄ってなんとか形になりました。※meta.txtは掲示板を作って自分で書き込めます。
しかし、これでよいのかどうか自信がもてないため質問します。

varda.plの191
sub CreateSubback{ } 内に

require('./module/legolas.pl');
$Caption = new LEGOLAS;
META($this,$Index,$Caption);

151# HTMLヘッダの出力
$Caption->Print($Page,undef);

他に
sub META{
 my ($this,$Page,$Caption) = @_;
 my ($title,$link,$image,$code);
 $Caption->Load($this->{'SYS'},'META');
}


ミスはないでしょうか?
811nobodyさん:2009/02/05(木) 12:21:03 ID:???
> ミスはないでしょうか?

お母さんのおっぱい揉みながら聞いてみるといいよ
812nobodyさん:2009/02/05(木) 12:22:33 ID:???
移動したんじゃないのかよw
813nobodyさん:2009/02/05(木) 12:23:39 ID:???
移動先で放置食らってるんだろw
814nobodyさん:2009/02/05(木) 12:42:41 ID:???
ソース見たけど嫌になった
815nobodyさん:2009/02/05(木) 13:24:44 ID:???
>>810
>ミスはないでしょうか?

動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
816nobodyさん:2009/02/05(木) 13:33:51 ID:???
技術者としては死んでいるね。そもそも技術者ではないか。
817nobodyさん:2009/02/05(木) 14:00:44 ID:???
strictプラグマwarningsプラグマ
http://d.hatena.ne.jp/lapis25/20090204/1233757194

両エントリktkr
818nobodyさん:2009/02/05(木) 15:30:00 ID:???
>>809を見る限り、合理的な理由を示さないのは外さない派だなw

>>817
モダン(笑)
819nobodyさん:2009/02/05(木) 16:35:05 ID:???
>>808
> 可能性がゼロじゃないわけで。

これについて、何の可能性なのかよくわかんないんだよね。
>>801 でいう「strict.pmが鯖に必ずしも入っていな」い可能性がゼロなのか、
use strict; use warnings; したときに出てしまうメッセージを潰しきれない
のがゼロなのか。

> ログはきまくるっていうのもあるのかな

そもそも何のログが出てくるのかと。
use strict; use warnings; しているときに何か出てくるのであれば、
それは必ず潰さなければらなない。
そんなものが出てくる時点で何かおかしいことをしている。
例外的に、わかってておかしいことをしたい場合は、その箇所に関しては、
個別的に黙らせればよい。
820nobodyさん:2009/02/05(木) 16:42:43 ID:???
use ***;書いてたらそれだけで処理に時間がかかるからじゃね?
821nobodyさん:2009/02/05(木) 16:44:10 ID:???
use strict; 外す派って、テストの時 use strict; つけてテストした後に、
外してもう一回テストやるの?面倒くさくない?
822nobodyさん:2009/02/05(木) 16:49:06 ID:???
> use ***;書いてたらそれだけで処理に時間がかかるからじゃね?

どのくらいの時間がかかるの?
ベンチとか取ってるのなら見てみたい。
823nobodyさん:2009/02/05(木) 16:50:25 ID:???
>>821
use strict; 外す派は、テストの概念が存在しない世界の人たちである気がする。
824nobodyさん:2009/02/05(木) 16:57:02 ID:???
おれが>>594で聞いたときも答えてくれなかったから教えてくれないでしょ
825nobodyさん:2009/02/05(木) 17:07:07 ID:???
use strict; use warnings; 付けないと死刑派のおれがテストしてみた
1000 回まわしてトータルで 0.3 秒の差だね。
行数多くなると少し変わるんだろうけど、この小さな差をどうにかしないと
いけない状況って本当にあるの?

# --- run.sh
#!/bin/bash
time bash call_strict.sh
time bash call_no_strict.sh

$ bash run.sh

real 0m5.904s
user 0m3.828s
sys 0m1.824s

real 0m2.561s
user 0m1.116s
sys 0m1.784s

# --- call_strict.sh
#!/bin/bash
for x in `seq 1 1000`; do
perl call_strict.pl 2>/dev/null 1>/dev/null
done

# --- call_no_strict.sh
#!/bin/bash
for x in `seq 1 1000`; do
perl call_no_strict.pl 2>/dev/null 1>/dev/null
done
826nobodyさん:2009/02/05(木) 17:07:48 ID:???
# --- call_strict.pl
#!/usr/bin/perl

use strict;
use warnings;

my ($a, $b, $c);
$c = 10;
$a = 100;
$b = "fuck";
$a = $b + $c;

# --- call_no_strict.pl
#!/usr/bin/perl

$c = 10;
$a = 100;
$b = "fuck";
$a = $b + $c;
827nobodyさん:2009/02/05(木) 17:17:53 ID:???
use strictしない(最終的に消す)派とか言ってるやつがuse CGIとかやってたりするんだろうな
828nobodyさん:2009/02/05(木) 17:54:21 ID:???
何と戦ってるんだ
829nobodyさん:2009/02/05(木) 18:33:37 ID:???
どこで誰が戦ってるの?
830nobodyさん:2009/02/05(木) 18:39:27 ID:???
人は色々なところで戦ってるんだ
831nobodyさん:2009/02/05(木) 18:41:08 ID:???
上條恒彦の歌思い出した
832nobodyさん:2009/02/05(木) 19:56:17 ID:???
コンパイルが簡単にできればすべては解決なんだろうな。
833nobodyさん:2009/02/06(金) 01:05:07 ID:???
strict使わない馬鹿なんかに構うことないだろお前ら
834nobodyさん:2009/02/06(金) 02:46:43 ID:???
燕雀安んぞ鴻鵠の志を知らんや
835nobodyさん:2009/02/06(金) 03:03:25 ID:???
>>825
計測したことがないけど、warning.pmは重くてstrict.pmはほとんど負荷がない、とドキュメントに書いてあったと思う。
だから俺はuse strictして、-wオプション付きでテストさせている。
836nobodyさん:2009/02/06(金) 03:09:28 ID:???
warningsと-Tオプションは納品時に外すがstrictは外さないでしょ
837nobodyさん:2009/02/06(金) 09:50:05 ID:???
負荷以前にstrictがないプログラムは怪しいぞw。不信すぎる。
838nobodyさん:2009/02/06(金) 12:54:45 ID:???
warnings も strict も -W も外さない
外して焦ってサポートに電話してくりゃ、そりゃ商機なんですよw
下手に改造されてワーニング放置で動かされて、とある日にぼろぼろのソースを直せと言われるより、
早期にワーニング出てもらって、修正依頼に対して「そちらが勝手に改造したので新規料金相当頂きます」のほうがいいんですよ
ちったぁ考えろって
839nobodyさん:2009/02/06(金) 13:15:50 ID:???
このスレの統一的見解は、

「納品時には use strict; use warnings; を外す」

でよろしいな?
840nobodyさん:2009/02/06(金) 13:27:58 ID:???
なんでだよw
841nobodyさん:2009/02/06(金) 14:26:30 ID:???
モダンなPerlerは外さない
842nobodyさん:2009/02/06(金) 14:49:52 ID:???
>>838
商品でどうこう言ってるくせに-Tオプションを使ってないのは胡散臭い
843nobodyさん:2009/02/06(金) 14:58:25 ID:???
-T つかうとどんなことが出来るのか、初心者のおれに教えてくれ。
844nobodyさん:2009/02/06(金) 15:20:39 ID:???
>>838
相手が勝手に改造するのと、strictとwarningsは関係なくね?
845nobodyさん:2009/02/06(金) 15:22:58 ID:???
他社に納品ってしたことないから分からんかった
846nobodyさん:2009/02/06(金) 15:24:01 ID:???
>>842
-T は使ったことないから知らないから、-T でどんな機能が働くのか教えてくれ
847nobodyさん:2009/02/06(金) 15:31:52 ID:???
ググった
自分のスクリプトを -wT で動くようにしてみよう

ありがと >>843
848nobodyさん:2009/02/06(金) 15:32:13 ID:???
>>842 だったw
849nobodyさん:2009/02/06(金) 15:34:06 ID:???
>>847
良く書けていたサイトがあれば教えて欲しい。
850nobodyさん:2009/02/06(金) 15:34:13 ID:???
>>843
>>846

つ 汚染チェック
851nobodyさん:2009/02/06(金) 15:37:21 ID:???
PerlでWebプログラミングしてて-Tの汚染チェック知らないとかヤバいだろw
852nobodyさん:2009/02/06(金) 15:46:56 ID:???
>>847
つ 確認用オプションは-wTcがオススメ
853nobodyさん:2009/02/06(金) 16:29:24 ID:???
$bosyu の値が1ならば、登録フォームを表示させる。
0ならば、登録フォームを表示させない。
1か0かは、管理人用ページから設定することができる。 という感じでPerlを組みたいのですが、
まだまだ初心者でよく分かりません。
一応、
<input type=radio name=bosyu value=1>表示する
<input type=radio name=bosyu value=1>表示しない
というフォームを作り、登録フォームの表示部分に、
if ( $bosyu == 1 ){
 #登録フォーム
}
else {}
というようにしました。
しかし、管理人画面から1にしようが0にしようが、登録フォームはどのみち消えてしまいました。
この場合、どうしたらよいのでしょう?;
854853:2009/02/06(金) 16:30:28 ID:???
<input type=radio name=bosyu value=1>表示しない
正しくは、
<input type=radio name=bosyu value=0>表示しない

でした。申し訳ありませんが、ご教示願いますm(_ _)m
855nobodyさん:2009/02/06(金) 16:36:45 ID:???
要するに、$bosyuに1がセットされないってことでおじゃるか
URLデコード的なものをしてないんじゃ?
856nobodyさん:2009/02/06(金) 16:46:23 ID:???
>>855 さん
ありがとうございます。m(。。;)m
URLデコード・・・ですか?今から検索かけてみます;

もしよろしければ、
http://www.77c.org/d.php?f=nk5918.lzh
に本体をアップロードしましたので、修正箇所など教えていただけますと助かります。
私自身が追加しましたのは、行381,行382,行678,行683,行684 になります。
857nobodyさん:2009/02/06(金) 16:51:07 ID:???
$bosyuじゃなくて$FORM{bosyu}でやってみれ
858nobodyさん:2009/02/06(金) 17:05:24 ID:???
$bosyu == 1
ってやりたいなら明示的に int(入力値) ってやったほうがいい
でなけりゃ 0 or 1 じゃなくて TRUE or FALSE にして、eq を使うとか
859nobodyさん:2009/02/06(金) 17:08:50 ID:???
>>857 さん
ありがとうございます。
やってみましたが、やはり0,1に関わらず登録フォームが消えてしまいました;

>>858 さん。
ありがとうございます。
今からやってみたいと思います。
860nobodyさん:2009/02/06(金) 17:17:25 ID:???
>>858 さんの方法で試してみましたが、やはりできませんでした。
ご迷惑おかけしてしまい申し訳ないです;
861nobodyさん:2009/02/06(金) 17:33:20 ID:???
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc11.2ch.net/test/read.cgi/php/1143834740/
862nobodyさん:2009/02/06(金) 17:36:41 ID:???
これまたひどいスクリプト
863nobodyさん:2009/02/06(金) 19:09:08 ID:???
>>862
そんなこと無いだろうさすがに

と思ったけど、これは酷いw

$bosyu 自体読み込みしてないけりゃ、$bosyu じゃなくて bosyu とかなってる始末

ログにはコメントしか出力してないし、CGI 君はどうやって表示するしないのフラグを知ればいいの?

もっと流れを知ったほうがいい。

あと、このスクリプトは酷いので別のを使ったほうがいい
864nobodyさん:2009/02/06(金) 19:13:45 ID:???
コレは酷い
strictすると駄目なので、ログから取得

Unquoted string "bosyu" may clash with future reserved word at 〜.cgi line 681
Name "main::e" used only once: possible typo at 〜.cgi line 538
Name "main::msg" used only once: possible typo at 〜.cgi line 210
Name "main::s" used only once: possible typo at 〜.cgi line 538
Name "main::c" used only once: possible typo at 〜.cgi line 538
Name "main::isdst" used only once: possible typo at 〜.cgi line 145
Name "main::yday" used only once: possible typo at 〜.cgi line 145
Name "main::sec" used only once: possible typo at 〜.cgi line 145
Use of "do" to call subroutines is deprecated at ./jcode.pl line 328
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 226
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 226
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 226
Use of uninitialized value $FORM{"com"} in substitution (s///) at 〜.cgi line 231
Use of uninitialized value $FORM{"com"} in substitution (s///) at 〜.cgi line 231
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 153
Use of uninitialized value $FORM{"action"} in string eq at 〜.cgi line 191
Argument "bosyu" isn't numeric in numeric eq (==) at 〜.cgi line 681
865853:2009/02/06(金) 19:19:01 ID:???
そんなに酷かったのですか・・・
私自身で追加した行は酷いと言われても仕方が無いと思っていましたが、
スクリプト自体が酷い となるとびっくりです。

ただ、今の私にピッタリのPerlスクリプトなので、どうしてもこれを使いたいのですが・・・
今まで色々と検索かけてみたり、ソースを変更してみたりしたのですが、
やはり私一人の力ではどうしようもできません・・・
もしよろしければ皆さんの「ここをこうすればいい」などの意見を参考にしたいです。
厚かましい願いではありますが、どうかご教示して頂けませんか?;
866nobodyさん:2009/02/06(金) 20:12:20 ID:LbIRe9/S
とりあえず、他の部分は見る気にもならないくらいの書き方なので、ピンポイントで。

どこのサーバで動作させるつもりかもわからないけどCGI.pmが入ってること期待して。

use CGI;
my $q = new CGI;
my $is_visible = $q->param('bosyu');

if ($is_visible) {
登録フォーム表示コード
}

で、いけるんじゃね?




867nobodyさん:2009/02/06(金) 20:37:48 ID:???
>>866 さん
ありがとうございます。
CGI.pmは先ほど試したのですが、使うとCGI自体の動作がおかしくなってしまうので
使えませんでした。
サーバーはWinXPのApache2で、Perl5を使用しています。
868nobodyさん:2009/02/06(金) 20:44:48 ID:???
>>867 自宅サーバ?
869nobodyさん:2009/02/06(金) 20:45:49 ID:???
>>868 さん
はい、自宅サーバーで運用しています。
870nobodyさん:2009/02/06(金) 21:08:43 ID:LbIRe9/S
どんな風におかしきなる?
CGI.pmでおかしくなるとは考えにくいけど。
use CGI は2行目あたりにきちんとかいてる?
871nobodyさん:2009/02/06(金) 21:18:08 ID:???
>>870 さん
はい、
use CGI; を2行目に挿入した時点では正常に動作していますが、
3行目以降で
my $q = new CGI;
my $is_visible = $q->param('bosyu');
を挿入しますと、サブルーチンで作った画面へアクセスすることが出来なくなってしまいます。
>>856のスクリプトですと、管理画面等に入ることが出来なくなります。
その際、エラー文を吐き出すことは無く、画面が変わらずトップページのまま といった感じです。
872nobodyさん:2009/02/06(金) 21:37:53 ID:LbIRe9/S
なるほど。

それなら
&decodeの下にその2行をいれてみて。
それでだめなら、decodeファンクションをかきかえないといけないかな。
873nobodyさん:2009/02/06(金) 22:58:05 ID:???
>>852
WTCって/bin/ladenのせいで無くなっちゃったんじゃなかった?w
874nobodyさん:2009/02/07(土) 01:10:56 ID:???
use Carp; してるモジュールを継承してもcroakが使えないのは何故?
親が使える関数は全て子供も使えるのでは?
875nobodyさん:2009/02/07(土) 01:24:33 ID:???
質問です。
既存の配布スクリプトをちょっくら改造しようと思ったのですが、
フォームの内容が空の時のみ処理をするといった部分

if( hogehoge eq "" ) {
#処理
}

これに加えてフォームの内容が特定の内容の場合も処理をするべく

if( hogehoge eq "" || hogehoge eq = "関東") {
#処理
}

このようにやったのですがフォームの内容が関東でも処理してくれません。
日本語がまずいのでしょうか?
どうか解決策をご教授くださいませ。
876nobodyさん:2009/02/07(土) 01:29:49 ID:???
>>875
=はいらないんじゃ?

それより、それでエラーでないのか?
877nobodyさん:2009/02/07(土) 01:31:18 ID:???
eq = はtypoだよな?
だとしたら、hogehogeの内容をprintしてみては?
878nobodyさん:2009/02/07(土) 01:37:04 ID:???
hogehogeって、hogehogeなのか。
879nobodyさん:2009/02/07(土) 02:13:03 ID:Bz2XlMXf
ActivePerl-5.10.0.1004-MSWin32-x86-287188.msi
をインストールして、Cからコンバートできるらしいとの情報をみつけたので
hoge.cをつくろうと、
C:\Perl\binへhoge.plをおき
プロンプトで
C:\Perl\bin>perl -MO=C hoge.pl > hoge.c
を実行したところ

Can't locate B/C.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at (
eval 1) line 18.
BEGIN failed--compilation aborted at (eval 1) line 18.
BEGIN failed--compilation aborted.

とでるのですが、どうやってやればよいのか非常に困っています。
どなたか何卒よろしくおねがいいいたします。
880875:2009/02/07(土) 03:07:36 ID:???
すみません、=はタイポです。

自己解決しようとバグフィックスして、
結果文字コードが不全だったようで
変数の文字コードを変換したら無事に動きました。

お騒がせすみませんでした。
881nobodyさん:2009/02/07(土) 04:10:24 ID:???
>>879
B/C.pmは5.10から標準で無くなった。
B/C.pmを入れるか、5.8系にするかしろ。

…でも正直それだけの価値は無いよ。
コンバートが上手く行くのは、すげえ初歩のスクリプトのみ。
882nobodyさん:2009/02/07(土) 06:37:23 ID:???
>>873
オプションを繋げて書くって知らないんですね、わかります。
883nobodyさん:2009/02/07(土) 06:59:37 ID:???
これは酷い、ネタだと思うけど

>>873
Perlのオプション知らないの??>>852の書いてあるのはバラしたら
-w
-T
-c
各々のオプションを一々チェックするのは時間のムダ
上のオプションを繋げて書くと
-wTc(順番は書く人によって変わる、例えば-cwTや-Tcwなんかでもおk)
必要なオプションをつけてテストするのは当然の事だが
-Tオプション知らなかったり、オプションを繋げて書くのを知らなかったり(オプションだと気付いてない?)
少しは勉強してからPerlやれよ
884nobodyさん:2009/02/07(土) 07:19:27 ID:???
>>883
ここにいるのはラクダ本どころか入門書すら読んだ事無い香具師がいっぱい
いちいち驚かない方が良い
885nobodyさん:2009/02/07(土) 08:07:35 ID:???
初心者スレでいちいち知識を自慢するなよせせこましい
886nobodyさん:2009/02/07(土) 08:37:19 ID:???
>>874
継承したいならuse baseか@ISAを使うこと。
887nobodyさん:2009/02/07(土) 08:45:20 ID:???
>>883
ってか、ネタで書いてるんだろうからそんなに怖い顔してレスするなよ
888nobodyさん:2009/02/07(土) 09:21:29 ID:???
>>883
/bin/ladin にもつっこんでやれよ。
889nobodyさん:2009/02/07(土) 09:23:04 ID:???
/bin/laden だった orz
890nobodyさん:2009/02/07(土) 10:40:23 ID:???
>>889
つ どんまい
891nobodyさん:2009/02/07(土) 14:01:02 ID:???
こんな風に秒数から適切な時刻の形式に変換したいです。
45 -> 45
130 -> 2:10
3601 -> 1:00:01
どうしたらいいでしょうか?
DateTime->new(second => 4032)とかしたらyearとかも入れろって怒られました。
892nobodyさん:2009/02/07(土) 14:10:32 ID:???
-c は syntax チェックだけで実行しながらのデバッグはできねーぜ?
893nobodyさん:2009/02/07(土) 15:08:36 ID:???
>>891
#!/usr/bin/perl -w
use Scalar::Util qw(looks_like_number);
use strict;

sub sec2hhmmss {
  my $sec = int(looks_like_number($_[0]) ? $_[0] : 0);
  my $min = int($sec / 60); $sec %= 60;
  my $hour = int($min / 60); $min %= 60;
  my $time = join ':', map sprintf('%02d', $_), $hour, $min, $sec;
  $time =~ s/^[0:]+//;
  $time || 0;
}

print map sec2hhmmss($_) . "\n", (
  45, 130, 3601, 86420, 'seconds', undef,
);
__END__
894nobodyさん:2009/02/07(土) 16:20:40 ID:dq0WM+XP
ActivePerl Version 5.8.9.825 をいれ直して、
hoge.cをつくろうとC:\Perl\binへhoge.plをおき プロンプトで
C:\Perl\bin>perl -MO=C hoge.pl > hoge.c を実行したところ
Starting compile
Walking tree
Prescan
Tie::StdHash has method TIEHASH: saving package
Tie::Hash has method new: saving package
Tie::ExtraHash has method TIEHASH: saving package
Regexp has method DESTROY: saving package
Errno has method TIEHASH: saving package
Exporter saved (it is in Errno's @ISA)
Net::Ping has method new: saving package
Net::Telnet has method new: saving package
IO::Socket::INET saved (it is in Net::Telnet's @ISA) IO::Socket saved (it is in IO::Socket::INET's @ISA) IO::Handle saved (it is in IO::Socket's @ISA)
POSIX::SigAction has method new: saving package POSIX::Termios has method new: saving package POSIX::SigSet has method new: saving package POSIX::SigRt has method new: saving package
Saving methods
No definition for sub Fcntl::O_LARGEFILE
No definition for sub Fcntl::O_LARGEFILE (unable to autoload) No definition for sub Fcntl::F_SETLK64
No definition for sub Fcntl::F_SETLK64 (unable to autoload) No definition for sub Fcntl::F_SETOWN
No definition for sub Fcntl::F_SETOWN (unable to autoload) No definition for sub Fcntl::O_DSYNC No definition for sub Fcntl::O_DSYNC (unable to autoload)
Can't locate object method "IVX" via package "B::NV" at C:/Perl/lib/B/C.pm line
650.
CHECK failed--call queue aborted.

となり0行のCファイルができました。 どこに問題があるのでしょうか?何卒よろしくお願いします。
895nobodyさん:2009/02/07(土) 16:26:29 ID:???
もとの pl さらせよバカチン
896nobodyさん:2009/02/07(土) 18:52:05 ID:???
バカチンって関東ではふつうにいうの?
俺は「あたしんち」で初めて知ったから
バカチンって聞くと「あたしんち」のお母さんが
口から火を吐いてる絵が思い浮かぶ
897nobodyさん:2009/02/07(土) 19:28:54 ID:???
俺はローマ教皇の姿が思い浮かぶ
898nobodyさん:2009/02/07(土) 19:34:33 ID:???
>>893
やはり関数自作ですか。ありがとうございました。
899nobodyさん:2009/02/07(土) 19:57:50 ID:3N01Kgc2
それはさておき、日本語混じり文の中の全角数字を半角数字に変換したいのですがやり方が分かりません。
ググッて見つけた方法をいくつかテストしてみたのですが、全てダメでした。
例:「2ちゃんねる」を「2ちゃんねる」に変換したい。

・テストコードその1(正攻法)
my $txt = '2ちゃんねる';
$txt =~ tr/0−9/0-9/;
結果:文字化け 「0Q0ソ0?0?0ヒ0」

・テストコードその2(Jcodeを使うといいらしい?)
use Jcode;
my $txt = '2ちゃんねる';
my $txt2 = jcode($txt)->tr('0−9', '0-9');
結果:文字化け 「」イ、d网ヘ、」

・テストコードその3(tr('[0-9]', '[0-9]')はEUCでないとだめ。スクリプトがSJISの場合は変換必要らしい?)
use Jcode;
my $txt = '2ちゃんねる';
my $from = jcode('0−9')->euc;
my $to = jcode('[0-9]-')->euc;
my $txt2 = jcode($txt)->tr($from, $to);
結果:文字化け 「」イ、d网ヘ、」

・テストコードその4(スクリプトをEUCにしてjcode.pl使用)
require './jcode.pl';
my $txt = '2ちゃんねる';
jcode::tr(\$txt, '0-9', '0-9');
結果:「2」はOKだが、日本語が文字化け 「2、d网ヘ、」

どのようにしたら、うまく変換できるでしょうか。
900899:2009/02/07(土) 19:59:02 ID:???
↑すいません、1行目を消してしまいました。
「ム板の質問スレってなくなったんでしょうか?」と書くつもりでした。
901nobodyさん:2009/02/07(土) 20:06:47 ID:???
jcode じゃなくて Encode を使いましょう。
902nobodyさん:2009/02/07(土) 20:18:17 ID:???
903nobodyさん:2009/02/07(土) 20:19:34 ID:???
敢えてSJISのまま
@num{qw(0 1 2 3 4 5 6 7 8 9)}= (0 .. 9);
$s=~ s/(\x82[\x4f-\x58]|[\x81-\x9f\xe0-\xfc].|.)/$num{$1} ne '' ? $num{$1} : $1/ges;

でどうよ
904899:2009/02/07(土) 20:44:36 ID:???
解決しました。
馬鹿馬鹿しい話ですが tr('0−9', '0-9'); の「0−9」の真ん中のハイフンまで大文字になっていました・・・。
ここを直してSjisで出力したら、テストコード3でOKでした。

use Jcode;
my $txt = '2ちゃんねる';
my $from = jcode('0-9−')->euc;
my $to = jcode('0-9-')->euc;
my $txt = jcode($txt)->tr($from, $to)->sjis;


Jcodeを使ったのは、ググッて見つけた解説がほとんどJcode使用ばっかりだったからです。
Encodeを使った場合、trするのはどうすればいいんでしょうか。
905nobodyさん:2009/02/07(土) 20:47:14 ID:???
Encode tr でぐぐってみたらいいと思います。
906nobodyさん:2009/02/07(土) 20:54:43 ID:???
>>904
もう、Unicode::Japanese使っちゃえよ。(遅いけど・・)
907nobodyさん:2009/02/08(日) 01:46:54 ID:???
>>898
DateTime使ってるんなら簡単な関数作ればいいんじゃね?

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

use DateTime;

my $tz = DateTime::TimeZone->new( name => 'local' );
sub s2dt {
  my $duration = shift;
  my $now = DateTime->now( time_zone => $tz )->epoch;
  my $duration_dt = DateTime->from_epoch( epoch => $now + $duration - $now );

  return $duration_dt->hms;
}

use Data::Dumper;
print Dumper s2dt(45);   # $VAR1 = '00:00:45';
print Dumper s2dt(130);   # $VAR1 = '00:02:10';
print Dumper s2dt(3601);  # $VAR1 = '01:00:01';
908nobodyさん:2009/02/08(日) 12:20:52 ID:???
>>907
ドキュメントの読みの浅さが露呈して申し訳ないです。
ありがとうございました。

が、>>891をやるには、単純に
DateTime->from_epoch(epoch => 3601)
でいけると思ったのですが、
>   my $duration_dt = DateTime->from_epoch( epoch => $now + $duration - $now );
はどんな意味があるのですか?
909nobodyさん:2009/02/08(日) 18:14:28 ID:bk/uRgIM
デバックってどうやるのですか?教えてください。
910nobodyさん:2009/02/08(日) 18:30:44 ID:???
deback?
911nobodyさん:2009/02/08(日) 18:38:25 ID:???
N88だとRUNしたときにエラーの行が表示されるでしょう?
あれですあれ。perlはどうやってやるのですか?
912nobodyさん:2009/02/08(日) 18:47:33 ID:???
Perlでもエラー行出るだろう
913nobodyさん:2009/02/08(日) 18:55:22 ID:???
kcatch つかうといいよw
914nobodyさん:2009/02/08(日) 18:56:22 ID:???
>>911
ああ、デバッグのことか。
915nobodyさん:2009/02/08(日) 18:59:30 ID:???
プロバイダとかの無料webスペースだと、色々成約があってエラーの内容を知るのって難しそう
916nobodyさん:2009/02/08(日) 19:11:47 ID:???
917nobodyさん:2009/02/08(日) 22:13:41 ID:???
if () {} elsif() {} else {} って、どう改行してますか?人によって色々あると思うので参考にさせてください。
自分はこう書いてます。

if () {
} elsif () {
} else {
}
918nobodyさん:2009/02/08(日) 22:25:08 ID:???
>>917
パッケージについてきたモジュールのソース見れ
919nobodyさん:2009/02/08(日) 23:40:09 ID:???
>>908
あ。ごめん$nowいらないな
最初違うやり方で作った後に「差を出せばいっか」ってことに気づいてやったんだけど、
epoch => $duration
だけあればいいね
920nobodyさん:2009/02/09(月) 00:03:20 ID:???
>>917

If () {
}
elsif () {
}
else {
}

制御文の頭が常に一列目に来るようにこんな感じで。
()の両側には1スペースを入れる。
921nobodyさん:2009/02/09(月) 00:46:19 ID:???
if () {
} elsif () {
} else {
}
おれはこんな感じ
スタートとエンドが同じタブ位置って考えると、これが自然かなと自分では思ってる。
922nobodyさん:2009/02/09(月) 03:06:32 ID:???
いいじゃないか、こうだって。

if()
{
}
elsif()
{
}
else
{
}
923nobodyさん:2009/02/09(月) 03:12:05 ID:???
>>917
俺はこう。

if () { }
elsif () { }
else { }

嫌なんだよ、改行が。cssとかもいつもこう書いてる。
924nobodyさん:2009/02/09(月) 09:48:22 ID:???
>>922
俺もこう
925nobodyさん:2009/02/09(月) 10:26:36 ID:???
>>923
一行に収まらなかったらどうするの?
926nobodyさん:2009/02/09(月) 10:51:55 ID:???
>>923以外全部ありかな。
927nobodyさん:2009/02/09(月) 11:44:49 ID:???
以下奇怪なif-elsif-else大会
928nobodyさん:2009/02/09(月) 13:11:50 ID:???
そして終了
929nobodyさん:2009/02/09(月) 19:28:09 ID:???
>>925
$aaa; $bbb; $ccc
と一行にするよ。
930nobodyさん:2009/02/10(火) 00:17:09 ID:???
>>920
931nobodyさん:2009/02/10(火) 00:31:04 ID:???
続きは lislog.livedoor.com とかでやれよ
932nobodyさん:2009/02/10(火) 11:59:32 ID:???
>>669
読んでないが激しく糞だった
ここの住人には全く必要ない
933nobodyさん:2009/02/10(火) 13:39:53 ID:???
>>932
読んでないのに何で糞ってわかったの?
934nobodyさん:2009/02/10(火) 15:15:40 ID:???
>>933
糞は臭いでわかるだろ
935nobodyさん:2009/02/10(火) 16:06:06 ID:???
ほんとだ!
>>934から糞の臭いがするよ!!
936nobodyさん:2009/02/10(火) 17:41:55 ID:???
>>935
まず自分の鼻にべったりついている糞を洗い落とせ。
937nobodyさん:2009/02/10(火) 17:59:35 ID:???
電波お花畑板でやってくれ。
938nobodyさん:2009/02/11(水) 01:12:17 ID:DSvC+HT2
my $num = 5;
for (my $i=0;$i<$num;$i++) {}
for my $i (0..$num-1) {}

# 両方ともしっくりこないのですが、妙案ありませんか?
# ruby の (0...5) みたいなのが希望です
939nobodyさん:2009/02/11(水) 01:26:15 ID:???
for (1..5){}でできるよ
940nobodyさん:2009/02/11(水) 01:35:21 ID:DSvC+HT2
>>939
レスありがとうございます。
今回は配列の添字で$iを使いたいのです。説明足らずですいません。
# かといって$[を書き換えるような事はしたくないのでw
941nobodyさん:2009/02/11(水) 01:40:31 ID:???
ブロックの中では$_が使えるんだが
942nobodyさん:2009/02/11(水) 04:51:02 ID:???
for my $i (0 .. 5) {} でできるよ
943nobodyさん:2009/02/11(水) 06:47:14 ID:???
for my $i (0 .. 4) {} だべ
944nobodyさん:2009/02/11(水) 09:12:53 ID:???
$numの値が分からないから無理やん
945nobodyさん:2009/02/11(水) 09:35:29 ID:???
これでええやん。

for(0 .. 4){
  my $i = $_;

  ・・・・
}
946nobodyさん:2009/02/11(水) 10:55:50 ID:???
しっくり来ないというのがよく分からない。

my $num = 5;
my $n = $num-1;
for my $i (0 .. $n) {}
947nobodyさん:2009/02/11(水) 13:33:22 ID:???
値の数値じゃなくて、配列が何個目かとりたいんじゃないかな。
948nobodyさん:2009/02/11(水) 13:36:30 ID:???
おまえ親切だな
それは違うと思うけど
949nobodyさん:2009/02/11(水) 13:37:25 ID:???
結構こんなことをやる
my @foo;
foreach my $num (0 .. $#foo) { ... }

それか、grep、mapとか・・・
950nobodyさん:2009/02/11(水) 13:39:43 ID:???
map は配列を返すときに有用であって、ただのループに使うべきじゃないと思うがw
951nobodyさん:2009/02/11(水) 19:17:33 ID:???
map 期というものが perler にはあってだな。。。
952nobodyさん:2009/02/12(木) 01:21:39 ID:elf1AFfG
cronを使用して自動でディレクトリのファイルを監視するプログラムをperlで作成しています。
その際予期しないファイルを発見した時、外部サーバーのphpファイルへhttpアクセスするという
事を行いたいのですがどのようにすればよいのでしょうか?

流れは以下のようになります。
1.perlが予期しないファイルを発見する。

2.perlからhttp://www.hoge.com/check.php?g=1へアクセスを行う

3.check.phpが引数を取得して処理をする。


上記処理を自動で行いたいのですが。
どなたかお解かりになる方、ご教示お願い致します。
953nobodyさん:2009/02/12(木) 01:29:57 ID:???
954nobodyさん:2009/02/12(木) 08:59:48 ID:???
その通りに書けばいいだけだと思うのだが...
955nobodyさん:2009/02/12(木) 09:06:47 ID:???
>>952
うpロダの違法ファイルとかの処理なのかと思ったけど、
エロ画像を検出するモジュールなんて流石にないかw
956nobodyさん:2009/02/12(木) 09:26:47 ID:???
何処が分からないのか具体的に書かないとレス付かないよ。
957nobodyさん:2009/02/12(木) 12:30:22 ID:???
おそらくは

あぷうろだを運営しています
ファイルがアップされたときにファイルの中身をプログラムでチェックしており、
あやしいファイルがアップされたときに外部のURLへ通知を行いたいのですが
どのようにやればいいのか分かりません

なのかな?
だとすれば >>953 にある
use LWP::Simple;
$content = get($URL);
で解決します
958nobodyさん:2009/02/12(木) 12:36:09 ID:???
>>957
単にリダイレクトするだけでよい可能性もあるなw
959nobodyさん:2009/02/12(木) 12:37:01 ID:???
>>957
>あやしいファイルがアップされたときに
どう考えても、ここが一番頭を使いそうなものだが
960nobodyさん:2009/02/12(木) 16:47:42 ID:???
文字列の中の複数の文字を入れ替える事を目的としています

$test = '文字列の中の複数の文字を入れ替える事を目的としています';
$test =~ s/文字列/Peal/g;
$test =~ s/目的/CGI/g;
としても駄目でした。
複数の文字列を入れ替える方法をご存知でしたらご教授願います。
961nobodyさん:2009/02/12(木) 16:51:46 ID:???
駄目と言うと?
962nobodyさん:2009/02/12(木) 16:57:41 ID:???
>>961
作業していた文字の中に表現文字が入っていたみたいで正常に作動してなかったみたいです。
実際に使っているコードを見せないと駄目ですよね。以後気をつけます。
ご返答ありがとうございました。
963nobodyさん:2009/02/12(木) 17:25:17 ID:???
quotemeta でもやっとけ
964nobodyさん:2009/02/12(木) 17:36:07 ID:???
なぞの「表現文字」について
965 ◆TWARamEjuA :2009/02/12(木) 23:44:20 ID:???
clamavに通していたりします♪@うpファイル
966 ◆TWARamEjuA :2009/02/12(木) 23:45:38 ID:???
(´-`).。oO(昨夜のRock54不具合と同じ事かぁ。。。)
967nobodyさん:2009/02/13(金) 09:47:26 ID:???
トリップ付けるやつにろくなやついないなw
968nobodyさん:2009/02/14(土) 01:31:17 ID:???
Imagerでjpeg読めないんだけど
969nobodyさん:2009/02/14(土) 10:44:28 ID:???
まずは、これ動かしてみれ。
これに含まれてないフォーマットは読めない。

use Imager;

my @types = Imager->read_types;
print "@types\n";
970nobodyさん:2009/02/14(土) 11:43:20 ID:???
ppm.tcool.orgから持ってきた0.67使ってるんだけど、それやると
sgi
bmp
ico
pnm
tga
raw
ってなるんだよね。前はjpegも使えたと思うんだけど。アップデートしたときかな
971nobodyさん:2009/02/14(土) 19:47:40 ID:???
>>970
煽り口調でブログのエントリ書くと、低姿勢で速効対応するよ
972nobodyさん:2009/02/14(土) 19:51:11 ID:???
朝鮮人かよw
973nobodyさん:2009/02/14(土) 21:15:21 ID:???
>>970
試しにbribesのリポジトリから落としてみたら、これはjpeg対応してるっぽい。
974nobodyさん:2009/02/14(土) 22:41:05 ID:oywl4yOv
スレッド掲示板のスレッドを削除するスクリプトを書いていてふと思ったのですが
そのスレッドの内容が書かれているファイルとディレクトリを削除するため
unlinkとrmdirを使う時、flockのようなことをしなくても問題ないのでしょうか。
一応、ファイルに関しては開いてflockでロックをかけた後、unlinkをしてみたのですが
Permission deniedと表示されてしまい削除されませんでした。
仮に必要な場合はflockではなく、ファイルやディレクトリを作成しその間は読み込めないように
するしかないのでしょうか。
975nobodyさん:2009/02/14(土) 23:11:40 ID:???
>>974
よく考えるんだ。
ファイルロックは、変更が競合しないために行うものだという点を思い出せ。
976nobodyさん:2009/02/15(日) 00:36:02 ID:Bli/G9UX
感覚的に使っている部分があったのでflockについて詳しく調べてきました。
flockはファイルの読み書きに対応するのであってしかもflockは
仮にロックがかかっていてもflockを宣言したファイルでなければ
読み込めるみたいですしunlinkとrmdir意味がなさそうですね。
となると使わなくてもいいかファイルやディレクトリを利用してのロックですね。
調べてもそれらしき内容のものは出てきませんし大丈夫な気もしますがどうなんでしょうか。。
977nobodyさん:2009/02/15(日) 00:50:45 ID:???
>>976
結論だけ言うと、何も考えずに削除してかまわないんじゃないかな。
噛み砕いて解説しようと思ったけど、予備知識が足りてない模様なので、更なる精進を期待する。
978nobodyさん:2009/02/15(日) 02:46:56 ID:Bli/G9UX
>>977
そうですか。perl以外の他の知識が必要みたいですね。
システムコールあたり?ちなみに'perl unlink'ではなく
'unlink'で調べたらC言語のunlinkの解説が出てきて見てみたのですがopenされてると
削除されないように出来てるみたいですね。削除中にopenされたら?
とも思いましたがファイルの削除が開始された時点でアクセス不可になる。
というように今のところ解釈しています。
あくまで予想なのでこれからももっと励んでいつか理解できるように
なりたいと思います。ありがとうございました。
979nobodyさん:2009/02/15(日) 03:13:07 ID:???
というかどうせ消すならアクセスされても問題ないんじゃ
flockって同時にopenした時に
片方がもう片方に上書きされるのを防ぐためのもんでしょ
980nobodyさん:2009/02/15(日) 04:03:44 ID:???
ひょっとしてキミはだいぶ自分の事しか考えない人だなw
981nobodyさん:2009/02/15(日) 09:20:41 ID:???
>>978
unlinkしとけばOSの側がいいように取り計らってくれるから、
こっちがどんな順番でどう処理するか考える必要ないと思うけど。
982nobodyさん:2009/02/15(日) 09:22:25 ID:???
どうせ消すんだから、書き込まれてから消しても
消した後に書き込み失敗しても関係ないじゃん。
983nobodyさん:2009/02/15(日) 13:17:53 ID:???
消す順番はインデックス→データの順番な
984nobodyさん:2009/02/15(日) 13:34:19 ID:???
Unixなら、ファイルが開いた状態であれば、closeするまで内容が保障され、
close後にunlinkが実行される。

一方Windowsはunlinkに失敗した。
985nobodyさん:2009/02/15(日) 18:24:40 ID:???
ファイルロック自体はWindowsの方が優れてるけどな。WindowsのPerlの実装は知らないが。
986nobodyさん:2009/02/15(日) 19:10:45 ID:???
Unixの多くの実装は勧告ロックで、Windowsは強制ロックだからね。

>>984は、一方ロシアは……のネタだから、あまり突っ込m
987nobodyさん:2009/02/16(月) 10:10:47 ID:???
そもそも書き込まれる可能性のあるファイルを削除するってどうなの
988nobodyさん:2009/02/16(月) 10:27:36 ID:???
どうもしないよ
989nobodyさん:2009/02/16(月) 11:46:19 ID:???
立てといた。

Perlコーディング初心者質問スレ Part 59
http://pc11.2ch.net/test/read.cgi/php/1234752149/
990nobodyさん:2009/02/16(月) 12:31:40 ID:???
ま、RDBMSを使う方が楽だな。
991nobodyさん:2009/02/16(月) 13:06:22 ID:???
数万件で抽出したデータからまた別のデータを導かせない限り、
数万程度までだったら txt ベースの方が全然扱いやすい
992nobodyさん:2009/02/16(月) 16:43:42 ID:???
>>991
主観乙
993nobodyさん:2009/02/16(月) 16:49:56 ID:mVH+JlHn
なんか新スレに書き込むのは気が引ける・・・

$title = "*********<title>ホームページ</title>*******";
という変数から「ホームページ」を抜き取るのになにか良い方法はないでしょうか?

現在<title>と</title>でsplitをして取得していますが、パターンマッチを用いて
上手く出来ないでしょうか?

どなたか宜しくお願い致します。
994nobodyさん:2009/02/16(月) 16:54:38 ID:???
>>991
「なるほど」と言って数万個のデータを数万個のファイルに書き落とす初心者が出現
995nobodyさん:2009/02/16(月) 17:11:21 ID:???
>>993
my ($res) = $title =~ m!<title>(.*?)</title>!;
996nobodyさん:2009/02/16(月) 18:45:42 ID:???
my ($res) = $title =~ m!<title>(.*?)</title>!is;

にした方がいいと思う

理由
(1) 必ずしも title となってない。 TITLE ってやってるところもある
(2) 変数に入ってるデータに改行が入ってれば s はあった方がいい
997nobodyさん:2009/02/16(月) 19:41:13 ID:mVH+JlHn
>995
>996
お二方有難う御座います。
パターンマッチ結果を変数に入れられるんですね。勉強になりました。
998nobodyさん:2009/02/16(月) 20:08:20 ID:???
my ($res)
↑このカッコの意味が分からないorz

my $res = $title;
$res =~ m!<title>(.*?)</title>!is;

↑動作は同じはずだけど、こうやってました
999nobodyさん:2009/02/16(月) 20:13:34 ID:???
カッコは正直意味無いだろ。
後半は全然違うと思うが。
1000nobodyさん:2009/02/16(月) 20:18:15 ID:???
カッコなしだと、$titleには1がはいっておしまいのような気がする

次スレで教えて欲しい
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。