Perlコーディング初心者質問スレ Part 58
5 :
nobodyさん :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;
6 :
nobodyさん :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として上記のサイトのように出力するようにするにはどうすればいいでしょうか?
$aとか$bはsortで使うから使わないほうが良いよ。
>>7 知り合いに作ってもらったのですが、触り方がわかりません。
同じ出力でできるのでしたら教えてください
知り合いに作ってもらえばいいだろw
いや今海外に居て連絡がつかないんです なのでこちらでお願いしているんです
しらんがな
さすがに変数を変更出来ないのは初心者以前の問題じゃんw 最低限の知識ぐらいは身につけてから来た方がいい。
>>12 復号等は諦めますので、暗号化だけはしたいんです
初心者以前なのは承知の上で今回だけお願いします
お断りします。
>>5 $resp->is_successと$resp->status_lineを確認してみれ。
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> こんな感じでやってるのですが、他に効率のいい方法があったら教えてください。
>>20 HTML::FillInFormを通すとかダメ
>>20 selectする要素がDBに入ってるから、
ループでまわして、同じ値だったらselectedするようにしてる。
[% 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 %]
25 :
5 :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 出力結果がよくわからず。。まだまだ勉強が足りないようです。。
バッファリングかよ。どういう出力先のどういう問題だ?
my $c = 9250; #JISコードの"あ" print Jcode->new(chr $c,"jis")->utf8,"\n"; print Jcode->new("あ","jis")->utf8, "\n"; 異なる結果が表示されるのですが、同じ結果はどうすれば得られますか。
JISの 'あ' は10進9250じゃなさそうな気がする
chr が返すのは Ascii だから、そこの時点で終わってる
31 :
20 :2008/08/08(金) 11:08:08 ID:???
>>22 こんなものがあったのですね。とても便利そうなので使ってみます。
>>23 ふむふむ
>>24 具体的な使い方ありがとうございます!
みなさんどうもありがとうございました。
>>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使わないとスクリプトなんて書いてられないんだが、
# 言及してないところを見ると、後釣りなんだろうか。
'あiう' が5バイト程で済みそうな感覚のまま気軽に試しただけじゃないかな。 本気でエスケープシーケンスにまみれてたら元質問が出てこない。
35 :
5 :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 ; #全部出力される
>>35 うーん、再現しないなあ。ページは
>>5 のソースのアレでいいんだよね?
他に再現するページはあります?
>>35 Perl 5.8.8 on Linux
Perl 5.8.8 on WinXP
にて再現しませんでした。
38 :
35=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の問題ではなくて、コマンドプロンプトが勝手にセッションを切ってしまうのかもしれません。。
39 :
nobodyさん :2008/08/10(日) 13:54:06 ID:e4jqjZel
WinのActivePerlにて一行目に #!C/:perl/bin/perl として指定していますがこれをを #!usr/bin/perl で動かしたいのですが良い方法はありますか?
>>39 試してからもう一度聞きに来てくださいな。
あ、あたち、……待ってゆかやぁ!
# ちなみにそれ、どっちもたぶん間違っているけれど釣りなのか typo なのか。
どっちもアレだねw まあ、何も書いてなくても動くけど。
42 :
36 :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
置換で後方参照を変数展開したいのですが どのように記述すればいいでしょうか? $str = 'XXX,YYY'; $aa = $ARGV[0]; # (.+),(.+) $bb = $ARGV[1]; # $2-$1 $str =~ s/$aa/$bb/; # YYY-XXX になるようにしたい
eオプションとか使えば? ただ$1-$2は"で囲わないと、変数展開しないと思う。
eオプション付けても そのまま $1-$2 に置換されます。 できないのでしょうか。
e二つなら、"も二重にする必要がある。 忘れずに。
変数展開二重にする必要があるから、明示的にeを使用する。それも2回。 eを使わなくても変数展開するが、その場合は一度しかしない。 $2-$1だと引き算が行われるので、"で囲って変数展開が行われるようにする。
ありがとうございました。 最終的にこうしました。 $str = 'XXX,YYY'; $aa = $ARGV[0]; # (.+),(.+) $bb = $ARGV[1]; # $2-$1 $bb = "\"".$bb."\"" if($bb =~ /[\$]\d/); $str =~ s/$aa/$bb/ee; # YYY-XXX になるようにしたい
50 :
nobodyさん :2008/08/16(土) 16:45:37 ID:oiXxzTPY
.qmailからパイプにて呼び出すプログラムで MIME::Parserを使用してメールを処理したいのですが my $parser = MIME::Parser->new(); $parser->parse(\*STDIN); のparseを呼び出した時点で処理がとまってしまいました。 無限ループではまったかのようにとまっています。 falseも返ってきません。 ネットを調べても、上記の状態でとまったという事例を 発見することができませんでした。 原因として考えられることはどのようなことでしょうか?
STDIN の内容を一旦読み込んで、読み込んだ変数に対してやってみて
52 :
nobodyさん :2008/08/16(土) 17:02:50 ID:oiXxzTPY
my $buf; while(<STDIN>){ $buf .= $_; } my $entity = $parser->parse($buf); ありがとうございます。 この形でよろしいでしょうか? 上の形にしても現状の解決はできませんでした。 新しくわかったこととして、メールに画像を添付した際に とまってしまっていることがわかりました。 ファイル添付をしていないメールならば $parser->parse()を抜けてきているようです。
まさか・・・Win/LinuxでのSTDIOの扱いはわかってるよね?
54 :
nobodyさん :2008/08/16(土) 18:02:12 ID:oiXxzTPY
> まさか・・・Win/LinuxでのSTDIOの扱いはわかってるよね? 正直今ひとつわかっていないと思います。 どこか、大前提のようなものが抜けているのでしょうか?
何かの理由で eof が来ていなくてずっと待機しとるのではないかな。 qmail 使ったことないんでわからんけど。
問題を切り分けろよ。
qmail のログとか、qmail のインストールで null に出してる内容を出させるとか .qmail 使わずに添付ファイルの受信は出来てるのかとか、色々問題を切り分けてみてよ あと止まる直前か直後の文字コードを、正常に受信出来たときのコードで憶測してみるとか まだまだやることはあるんじゃないの?
変数ではなくて、ファイルにキャプチャして、 そのファイルが展開できるかどうかをチェックしてみればいいんじゃないのか。 あと、エラートラップは、きっちり書いて。
読み込んでる時に止まってるんだからファイルに落とせないのでは? 質問者が特定場所以降のドロップっ意味で止まってるって書いてるならやる意義は十分ありますが…
ファイルに取れないのなら、Perlの問題じゃないってこった。
おまえら親切だな
練習がてら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 ****
そもそもVBでもうまく通ってないじゃないかwwwwwwwwwwww
>>63 自覚はないのかも知れないけれど、なんだかすごく混乱しているみたい。
VB, Oracle, oo4o, OLE, Perl のそれぞれに分けて把握を整理したほうがよさげ。
oo4oのマニュアルではFieldsはプロパティと成っています。 エラーメッセージから分かるのは、Fieldsをメソッド/サブルーチンとして呼び出そうとしている。 それを踏まえてPerlの文法をもう少し勉強してみます。
>>63 perlの文法は行の最後にセミコロン;が必要だよ
すんません、教えてください 文字列で、"20080820"となっている 前日(昨日)を求めるコーディングを 教えてください。
20080820 - 1
>>69 それだったら、
20080801
の場合はどうするのかな。
Date::* なモジュールを使え。
20080800になってしまうので困ります
perl -MDateTime::Format::HTTP -e 'print DateTime::Format::HTTP->parse_datetime('20080821')->subtract(days => 1)->ymd("")'
use Date::Calc qw(Add_Delta_Days); とか use Date::Manip qw(UnixDate DateCalc Date_Init); とか。
timelocalでepochタイムに戻して-24*60*60してlocaltimeに食わせる 日付の話がでたついでに質問なのですが、Nヶ月後とかNヶ月前ってどうやって計算してる? (というよりどう定義してるかの問題?) Q1. 1月31日の一ヶ月後 Q2. 2月28日の一ヵ月後 Q3. 3月31日の一ヶ月前 Q4. 3月31日の一ヵ月後
77 :
63 :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;
}
78 :
nobodyさん :2008/08/21(木) 09:39:20 ID:VetJG0Vx
$OraDatabase->CreateDynasetが転けていただけでした。 print $OraDynaset->Fields('ABCD')->Value."\n"; は普通に通ります。
こっそりとsageて質問します。 ギャル文字の正規化モジュールとか知りませんか。ギャル文字への変換じゃなく、ギャル文字からの変換。 手作業で対応表を組もうとかも考えましたが、無謀すぎた……orz
文字コードの変換について質問です。 今様々なWEBページからHTMLを取得して、それをShiftJISに変換しているのですが、 JcodeでもEncodeでも一部のページで文字化けが起こって困っています。 文字化けを極力起こしたくない場合、どのような変換方法がいいのでしょうか?
文字化け起こしたページの原因を把握すればいいかと 元ページ自体が文字化けしてるかどうか目視することも一考
>>80 decoded_contentが一番楽っぽい。
gzip/deflateにも対応してるみたいだし。
$r->is_success or die $r->status_line;
my $content = $r->decoded_content();
defined $content or ...;
utf8で出てくるから、あとは適当に変換で。
83 :
80 :2008/08/25(月) 20:08:13 ID:???
>>81 文字化けするページは一部文字化けしている場合が多いですね。
もともとそのページに問題があるのかも知れません。
>>82 そんな方法あったんですね、初めて知りました…。
近いうちに試してみようと思います。
返信ありがとうございました。
Queryデータ受け取って条件分岐してデータ読み書きしてHTML表示すればいいんじゃないかな
既存のHTMLってのがどの程度のものかわからないが、cgiにそれを出力させる必要がある。 外部のものなら、パーサーで解析してチェックボックスを割り込ませて出力、とかいうことになるんじゃないか。 この作業が一番めんどくさい。
古い本読んでたら、cgi-lib.plとかいうのが 紹介されていたんだけど、これって現役?
既に退役。
まじで。じゃあどうすればいいのかな?
別に使ってもいいんじゃね
CGI.pmが最新ですか?
CGI.pmが標準。いささか古いが。 お好みでCGI::MinimalでもCGI::Simpleでも。
引数の取得は自前でするのが一番軽いから自前でというのは外道ですか? 車輪の再発明?
やれるんなら自前だってなんだっていいさ。 トレーニングのための再発明にゃあ手頃な車輪だろ。 よそに迷惑かけないようにさえすりゃ誰も止めねえよ。
クエリの分割は、RFCの決まりとブラウザの仕様で面倒なことになっているので、 CGIやCGI::Liteやフレームワークに丸投げした方がいい、と昔Perlスレで言われた
CGI.pmと CGI::Minimalと CGI::Simpleとで、 どれを使えばいいの?
とりあえずCGI.pm
勉強を目的に作る分には何も言わないが、 実際のサービスの為に作りこむのはアンチパターンの"高慢"。
99 :
nobodyさん :2008/08/28(木) 22:31:17 ID:oELFSwba
スレチだったのでもう一度こちらで質問させていただきます PHPで言うところのupload_max_filesizeやpost_max_sizeは、 Perlではどこら辺を設定すればいいんですか?
>>99 use CGI;
$CGI::POST_MAX = $limit_by_byte;
htmlやhttp勉強していたころからずっと今までCGI.pm使ってないな。。。LWPは使い出したが。 CGI.pmが簡単、は例からわかるんだが、 汚れた変なデータ渡されても誤動作しないのかとか デフォルト設定をちゃんと覚えないととかちょっとだけ不安。
古いPerlだとメモリーは無限で限界は考えなくて良いってコードが多いからその辺も気を付けるとか 何時の話だ
そういう面倒なのをやってくれちゃってるのがそいつなんじゃないの?
XSS対策で、引数の記号を適度に変換してくれるモジュールを自己開発しました。 マルチパートのパースがむつかしい、、、というかめんどくさい。。 while(<STDIN>) ってしたら、大きい添付ファイルきたらいちどメモリに確保する分つらいしな。。 readでちょっとずつ読むしかないのか、、
ん? 質問内容がわからん
質問じゃなくてチラシの裏に書こうとした文だろう。
ソースのコメントにでも書いておけ
>>101 (==
>>99 ?)
Perl は汎用言語として開発されています。
そのためその言語仕様は CGI (をはじめとする Web プログラミング) など他の周辺仕様と直行しており、その点で PHP とは事情が異なります。
Web アプリケーション開発のために生まれたのが PHP で、
Web アプリケーション開発にも流用されているのが Perl であると言うこともできます。
Perl は CGI で利用できる言語として広く普及しました。
その過程で生まれたノウハウを抽出したものが CGI::* などのモジュール群です。
幸い CGI.pm は pure Perl ですから、この機会に目を通してみてはいかがでしょう。
その上で、あなたが必要とする品質に達していないと判断したなら、それは新しい車輪を作るに充分な理由だと思います。
イイモノができたら CPAN で公開してください。使わせてもらいます。
109 :
nobodyさん :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");
110 :
nobodyさん :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も空欄ですが、動いているようです
111 :
nobodyさん :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を取得する方法はありませんでしょうか。
112 :
nobodyさん :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'}; 後者が空になってしまうのは何故ですか?
後者は以下と同じこと ($hoge=gethostbyaddr(pack('C4',split/\./,$ENV{'REMOTE_ADDR'}),2)) or$ENV{'REMOTE_ADDR'};
115 :
nobodyさん :2008/09/02(火) 17:37:04 ID:62/De0KZ
>>113 そういうものなんですね。ありがとうございました。
>>114 confessも読んでいくと
my $pkg = caller(++$i);
unless(defined($pkg)) {
みたいなことをしてループでネストの深さ調べてるから
インクリメントしていると言える。
見かけ上自分でインクリメントしなけりゃいいならこれで
いいんだろうけどな。
117 :
nobodyさん :2008/09/02(火) 17:52:27 ID:IiWNBMxF
バイオインフォマティックスについて詳しい方いらっしゃいますか?
>>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);
}
119 :
nobodyさん :2008/09/02(火) 17:58:31 ID:IiWNBMxF
perlを使って突然変異前後における終止コドンのカウントをしたいんですが、初心者なのでまったく分かりません・・・(涙)
>>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 は無限ループっぽいのでご注意下さい
……(呆れている)
>>121 なんで…?
と思ってよくよく考えたら、confessそのまま使えばよかったのか…orz
すみませんなにか焦りのままにわけのわからない事をしてしまったようで…orz
>>123 > perlじゃなきゃダメなの?
bioinformaticといえばperlってくらい。
>>119 何の初心者かと言えばまず間違いなく Perl の初心者さんで、
バイオなんとかについては専門 (恐らく受講中) ということであれば、
# (この程度の情報はよこしてもよかろう、ケチんぼめ)
「バイオインフォマティクスのためのPerl入門」(ISBN4-87311-103-X)
を買え。
126 :
125 :2008/09/03(水) 02:16:22 ID:???
追伸: これを機会にPerlをイチから少々嗜んでおこうと考えたなら (または「バイオ(以下略)」のPerlに歯が立たなかったら)、 次の書籍から入るのが王道よん。 「初めてのPerl 第3版」(ISBN4-87311-126-9) いずれにせよこの手の応用なら計算のためのモデル化が必須で、 モデル化するためには当該分野の知識が必要、と。 数式にまで落し込んで示せば誰かコード例を書いてくれるかもね。 しかしそこまでできれば自分で書けちゃうよなあ。w
電算機言語を*嗜む*人向けのありがたいお話は 習い事板にでも書いて。
Perlの入門書でいちばんいいのは 結城さんのだよ。 ほかのはむずかしすぎて(説明が下手すぎて)わかんないとおもう。
配布cgiを改造して覚えた。 ここをこう直せばこう行ける、みたいな経験則で。
経験則だけで行くと、習得に時間が掛かる上に変な癖がつく。 ラクダ本やPerldocなど読んで、基本をしっかりマスターすることが大切。 文法エラーが出なければ、なんでも良い訳じゃない事を知って欲しい。 特にファイルオープンのエラー処理を省く奴。
と変な癖が付いた人が言う
Perl関係はドキュメント類が完備されているから、それでも質問に来るのは 頭の悪すぎる奴というのであってる。
とドキュメントを残さない、不完全なドキュメントを残す人が言う そして素人に最初から完璧な探し方を要求する
ドキュメント読むひまがあったら人に聞くだろ、常考
以前、人のプログラムを見ては「変な癖がついてる」「変な癖がついてる」と 連発する新人が来て、一週間で営業に飛ばしたのを思い出した。
なあ、もしかして英語読めないやつっているんじゃね? ありえないかな?
俺読めない。
sub hoge ($$\@) {} の($$\@)って何っていう名前だっけ?
使用目的だけを読んで使い方が判るんだ 凄いな
>>139 の「何っていう名前だっけ?」という質問に対して
>>140 はほぼパーフェクトな回答。
そもそもが知りもしないことを、余計な格好をつけるから
そういう間の抜けたことになる。
143 :
nobodyさん :2008/09/05(金) 06:53:30 ID:SLk/ayWJ
読み込んだHTMLファイル内に直接書かれてる「@{foo[8..15]}」のような文字列を 配列として扱えるように置換したいんですが、どう書けばいいですか?
5.10動くレンタルサーバーの一覧はありますか?
>>143 もっと違う方法を考えた方がいいと思う。
146 :
nobodyさん :2008/09/05(金) 11:12:25 ID:SLk/ayWJ
>>145 大したCGIではないのでぶっちゃけどんな方法でもいいのですが、
後学のためにもこの方法でお願いしたいです。
147 :
nobodyさん :2008/09/05(金) 12:29:59 ID:hg/3f6aE
use File::Copy;を使って コピーする場合と、 OSのコピーコマンドを 使ってコピーする場合は どっちが高速ですか? また、常に上書きされるのでしょうか?
>>147 最後に、
> 自分でマニュアルを読むのが面倒なので
> 代わりに読んで説明してください。
とつけとけ。
>>148 おまえがマニュアルを読んで
日本語で説明しろ!
そして死ね!
150 :
nobodyさん :2008/09/05(金) 13:12:50 ID:r9aXZuUN
use File::Copy;を使って コピーする場合と、 OSのコピーコマンドを 使ってコピーする場合は どっちが高速ですか? また、常に上書きされるのでしょうか? 自分でマニュアルを読むのが面倒なので 代わりに読んで説明してください。
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の方がはやいかな? 気になる人は何回も条件変えたりしてやってみると良いよ。
>>152 システムコピーを使った場合どうなります?
TTかー。うちはHTML::Templateなんだよなー。 やっぱ便利?
テンプレート変数をテンプレートにゴリゴリ書ける点は結構おいしい。 コードとデザインの分離が不完全になりかねないが。
つまり、TTにすると 今までデザイン担当がやってた部分を俺がやらなきゃならんってことか(笑)
デザイナにやらすんだよ
>161 ハハハ…… 無理だろうなあ。
クレヂットカード作りたいんですが自宅や勤務先に電話とかかかって来るんでしょうか? また支払いに遅れたら暴力団や政治結社とかから取り立てが来るんでしょうか? 無知でクレクレですいません(>_<)詳しい方、宜しくお願いしますm(_ _)m
164 :
nobodyさん :2008/09/08(月) 14:29:16 ID:wRo8Y2Dq
勤務先に黒服が直接訪問してきて所在確認します。 また延滞した場合は督促状が届き、それを忘れると社会的に葬られます。 気をつけましょう。
CGI.pmの初級質問です h1(); <H1>が生成 h1('aaa'); <H1>aaa</H1>が生成 では </H1>だけ生成するにはどうすればいいのでしょうか?
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;
print start_h1 , '2分で見つけたぐぐれかすしね' , end_h1;
thx ちなみにどんな語句で検索したんですか?
まぁ、マニュアル一度も読んでないんだろうな。 最低でもマニュアル読んで質問しろや、ぼけ。
マニュアル読まずに質問する初心者って何なの? もう、プログラミングやめた方がいいよ。
>>171 ここで聞けば答えてくれる人がいるのだから、マニュアルを読まない人が
いても不思議ではない。
でも英語で見逃す、訳し間違えることはよくある俺。
>>173 貴殿は、自らを成長する存在と見ておらぬのか?
マニュアル読まないやつは叩くのが回答者の嗜みだろ。 答える答えないは別として。
初歩的すぎるのか、ここら辺、CGI.pm関連ページでもあまり触れられないし、 start_xxx end_xxx ってパターン知らないと、調べるにもその先が広がらないよね
それでも一瞥したら目に入ると思うが。 初心者が手にするような入門書には書いてないのかもしれないな。 初心者は入門書がマニュアルだから。 入門書に書いてなければ、即質問。
Perl のマニュアルを見るには perldoc コマンドを使います: perldoc perl モジュールのマニュアルを見るには perldoc の引数にモジュール名を与えて実行します: perldoc CGI # 今回のケースはこのコマンドで表示される内容のうち、"SPECIAL FORMS FOR IMPORTING HTML-TAG FUNCTIONS" という節に載っています。 perldoc の使い方も perldoc で調べることができます: perldoc perldoc 以上、初心者のための perldoc 入門でした。よろしくご活用下さい。
rubyにユーザー数抜かれたくせに 態度でかいな。
ユーザー数・・・?
x:xxxxxxx>perldoc 'perldoc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 Pathが通ってなかったOracle10g付属Perl Pathを通すと動くようになった
winか。じゃあ仕方ない。
183 :
nobodyさん :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;
WindowsでもActivePerl入れれば、perldocもHTML版もきっちり入る。
WindowsでもActivePerl入れられない環境もあるよ 直前に出ているOracle Server入ってる環境もOracleのPerlと競合して入れられない。 (入れられはするが環境変数が競合して可笑しな動きをする) コマンドが使えるかどうか、使えなければ、PATHを通ってなければ通すとかすれば使えるから、そっちをやると良い
SQLインジェクションの対策のエスケープ処理について質問です。 mysqlで勉強してます。文字コードはsjisです。 1、「’、<」などの通常の特殊文字のエスケープ 2、sjisどうしても使う場合は「SELECT 〜$str 〜」のSQL文の中で使う すべての文字列をEncode::from_to($str, "sjis","sjis"); 毎回これ何個もずらりと書くの大変です。 mysqli_real_escape_string()関数も同様に毎回ですよね。 質問です。 ・1だけの処理で簡単に終わらせることは可能でしょうか? 可能でしたらどの文字をどうしたらよいのか知りたいです。 ・2をすれば対策になっていますか? よろしくお願いします。
>>187 1.
プレースホルダ使えよ
2.
SJISは知らん。多分はまり道なので避けられれば避けたほうがいいような
気はするが避けようがないなら....まあ、頑張れ。
inputとoutputで処理をかませる
>>187 それを行うライブラリを書いたらいいんじゃないかな。
それがたとえ既存の車輪だとしても、勉強になるし便利になるし安全…かどうかは中身次第だけど、少なくともメインプログラムの行数が減ればバグも減る。
192 :
187 :2008/09/11(木) 04:05:18 ID:???
>>188-190 IPAの解説書にプレースホルダか一つずつエスケープ処理する
対策があるみたいですね。
意識しないでquote()使っていたので大丈夫のようです。
今度からは、プレースホルダも使ってみたいと思います。
ありがとうございました。
inが使いたいときに困る>プレースホルダ
>>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);
こんな感じで特に問題ないと思う。
195 :
nobodyさん :2008/09/13(土) 14:59:35 ID:D0b2LLIL
cgi で、パラメタ文字列中の「+」(プラス)を拾いたいのですが、うまい方法はないでしょうか。 hoge.cgi?key=ab+cd で「ab+cd」という値として受け取りたいのです。 CGI::Lite, CGI::Simple, CGI::Minimum などは、皆「ab cd」と空白に変換してしまいます。
普通は%2Bにエスケープする
えーと、受け取る時ですが。
"+"はブラウザが%2Bにエンコードして送ってくる。 " "はブラウザが"+"にエンコードして送ってくる。 > hoge.cgi?key=ab+cd で「ab+cd」 として受け取りたいなら、RFC書いて、各ブラウザを改良させて、モジュールを修正する。 まぁ、頑張ってくれ。
URLのエスケープで半角スペースを「+」に変換するのが仕様なんだから、
「+」をその文字のままで扱いたかったら、
>>196 の言う通り
送り側が%2Bとエスケープしてからサーバーに送らんといかん。
どうしても「+」(送り側は半角スペースのつもり)のままで受け取りたいなら、
モジュールの中身を改造するか、自前で引数受け取り、デコード用の処理を書くかするしかないんじゃないの。
$ENV{'QUERY_STRING'} =~ s/\+/%2B/g; 逃げ道はあるけど、うまい方法だと思われても困る。
正規表現で dddから始まる行を、置換で削除したいです (下記の場合dddeeeが該当) aaa bbb ccc dddeee fff 検索:ddd[a-z] 置換:\n だとうまく置換されません なぜ??
^ddd.+
s/^ddd.*?$// ;
ム板の正規表現スレ向けのお話じゃないのかな。 Perl でやってるんだったら「こう書いてるけどうまく行かない」も書きましょう。 <$fh> =~ s/ddd[a-z]/\n/g; # うまく行かない
205 :
201 :2008/09/14(日) 21:26:47 ID:???
ありがとうございました 解決できて嬉しいです。
$data = "MAILADDR=<入力したメールアドレス>\n PASSWORD=<入力したPW>\n"; if (open(FH, ">data.bat")) { print FH $data; close(FH); ↑CGIを使用しページを見ているユーザーに入力を求め、<入力したメールアドレス><入力したPW>に代入?させてファイルに書き出したいのですがいい方法ってありますか?
1. メールアドレスとPW(?)を入力するフォームを作る。 2. そのフォームを受け取って、ファイルに書き出すスクリプトを作る。
一行にしておいた方が後で色々楽じゃね?
209 :
nobodyさん :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 したにつづく
210 :
209 :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 }
おれの目には15行目が見えんぞ
212 :
209 :2008/09/19(金) 13:56:08 ID:J2CRWlwv
>211 すいません。 改行制限に引っ掛かったので、14行目にまとめてました。 14 s/^(.+)\n//; 15 print ">$1\n"; 16 s/\d|>//g;
>>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 ;
}
214 :
209 :2008/09/19(金) 18:44:46 ID:???
>>213 添削ありがとうございます。
半端な知識で回答してしまって申し訳ないorz
>>117 氏を混乱させるとこでした。
出直してきます。
http://www.dotup.org/uploda/www.dotup.org2038.zip.html ゲームの得点ランキングを作ろうと思い、
名前・得点・コメントを入力してランキングに登録するといった形のものを作りたかったのですが、
値を入力し、送信してもうまく表示されません。
logのファイルに書き込みはできてるみたいですが、正しくかけていないように思えます。
どうすればランキングを表示できるでしょうか?
もうどこが間違ってるのか分からなくなってしまいましたので、アップロードさせていただきました。
どなたか修正・ご指導よろしくお願いします。
216 :
215 :2008/09/20(土) 07:44:46 ID:???
※ 修正は有料にて承ります。
220 :
215 :2008/09/20(土) 18:44:01 ID:???
わかりました。そちらで聞いてみます。 ありがとうございました。
パソコンの中でCGIを動かしたいんだけど、 どこの解説ページを見ればいい? XAMPPと自分でインストールしたアパッチで、 もう、通常のHTMLファイルと、PHPは 動くようになってます。 PerlもActivePerlでDOSプロンプトのコードは 動くようになってます。 あと、たぶんアパッチの設定だと思うんですけど。
>>221 Options ExecCGI
AddHandler cgi-script .cgi .pl
XAMPPをインストールしてあるんよ。
それで、普通のhtmlファイルは表示できるし、
http://localhost/1/1.htmlとかで 。
そんで、PHPのファイルも実行できるんよ。
http://localhost/xampp/ そんで、今、パソコンの中に、
ActivePerlがインストールされているんだけど、
さらに、xamppのホームページにある、
perlのアドオン、ていうのをとってきて、
インストールしないとだめなのかなぁ?って思って。
でも、そんなことしたら、自分のパソコンの中に、
activeperlと、xamppのperlと、二つのperlが混在することに
なりますよね。それでいいのかなぁ?と。
やりたいことは、perlでCGIのファイルを作って、 自分のパソコンの中で動かすこと! で、アパッチはたぶん、xamppのアパッチを使えばいいと おもうんだけど、perlは、前から使ってるactiveperlで いいのかな?って。 その場合、何か設定は必要なの? その場合、その設定は、xamppの、アパッチの、 httpd.confに対して行うの?
できた。 できた。できた。できた。できた。できた。できた。できた。できた。できた。できた。できた。 ボクのパソコンの中でハローワールドが動いた!!!!!!!!!!!!!
>225 忘れていたものを思い出させてくれた
文体からomotiを思い出した
忽然と消えたomoti
ム板のCLI日記に加えてCGI日記も始まるのか。
そっとしておいてやれ。
警察に通報しました。
flockって何回かトライする必要はないのでしょうか? for (1..5) { flock(FH, 2) and last; sleep 1; }
ない
mkdir|symlink がうまく行くまで5回ぐらい試すスクリプトの妙な影響かな。
ロック取得できない時に早期にエラー返す必要があるとか いくつかのファイルのうちどれかでロックが取得できればいい場合に LOCK_NBつけて、場合によってはループまわすことはあるが 普通に使ってる分にはそんな事する必要もない
そもそもflockの処理からタイムラグを億法が危険だと思う。
詳しく
複数回トライいらないんですね。 了解しました。
ユーザーフレンドリーで考えるなら何回かトライしてあげたほうが優しいよね
ブラウザでオンライン対戦できるゲームを作っています。 規模が大きくなるにつれてファイルを分割したのですが、 モジュールが呼び出し元のパッケージの変数を要求することが多く、 一々変数の前にパッケージ名をつけなければならないのが非常に面倒です。 mainパッケージの変数を簡単に呼べるようにno strictしたりもしましたが、 こうするとコードを書く効率が悪くなります。 何か解決法は無いでしょうか?モジュールの分割の方法が下手なんでしょうか。
くれぐれも共有サーバでやるなよ
>>240 わざわざ名前空間を明示しない意味がわからない
例えば新宿駅で、京王線のホームで駅員を呼んだら京王線の職員が駆けつけてくれたのに
「JRの職員が来ないのはなぜだ!!(#゚Д゚)」と言ってごねている人を君はどう思うか・・・
八王子市内から市外局番なしで電話をかけておいて、「03局に繋がらない!!(#゚Д゚)」と言って
NTTにクレームを付ける人をどう思うか・・・
コマンドプロンプトの引数に関する質問です。 以下のようなプログラムを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
それは壊れてるね 廃棄するしかないですね
>>243 関連付けが間違ってるか、Windowsが壊れたかのどっちか。
うちのWindowsは、たまに関連付けが壊れるので困る。
C:\Perl\bin\perl.exe "%1" %*
640×480の画像をアップロードした時に、同時に160×120のサムネイル画像も作成するプログラムを組んでいます。 それで画像のリサイズはImage::Magickで何とかなったんですが、作成後の容量がかなり大きくなります。 元の画像が100KBに対して、サムネ画像は30KBくらい。 quality値を下げても、画像が劣化するだけで容量がほとんど変わりません。 解像度はこれ以上落とせないとして、何か容量減らす方法って何か無いでしょうか? 理想は10KB以下で、画像の劣化は多少は諦めます。 どなたか分かる方がいればお願い致します。
resize => thumbnail どういうコード書いてるかエスパーじゃないからわからないけど小さくするのにresize関数 使ってるとか?
説明不足ですいません。 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");
249 :
247 :2008/09/29(月) 18:00:47 ID:???
$image->Scale(width=>160, height=>120); $image->Sample(width=>160, height=>120); thumbnailって関数あったと思ってたけどぐぐっても見つからなかった ScaleかSampleだったかな とにかく画像の容量は境目が鮮明なほど大容量になるから普通はぼかし入れてサイズ変更 することで容量がコンパクトに収まる。確かResize関数はそれをやってなかったから脹れる
手元にあったサムネール作成するコードはこんな感じ 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] );
Thumbnailメソッドはあるよ。 JPEG使えばquality=>50で大体10k切れると思う。
252 :
246 :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と同じような容量でした。
ひょっとしてサーバーが対応してないのかな…
253 :
251 :2008/09/29(月) 20:25:35 ID:???
華麗にスルーされた(笑 せいぜい頑張りたまえ。
254 :
246 :2008/09/29(月) 20:36:42 ID:???
>>253 すいませんw
でも元々の画像は全てjpgで統一してるので、あとはThumbnailが動けばいいんですが…
>>253 はすでに書いてあることしか書いてないじゃん
そりゃスルーされるわ
256 :
251 :2008/09/29(月) 22:15:24 ID:???
>>255 Image::Magick使ってから発言してるか?
160*120ドットにResizeして、JPEG,Quality50でWriteするだけで、10KB以下になるぞ。
257 :
251 :2008/09/29(月) 22:20:16 ID:???
つーか、160*120の8bitカラーとして非圧縮で19,200バイトなんだから、 GIFで圧縮したとしても、15KB程度ぐらいには圧縮可能だろうさ。
>246 今回の場合とは違うかもしれないが、自分も似たような症状でハマったことがある。 原因は、画像に含まれるコメントなどの付加情報だった。 Thumbnailなら消えるのかな?
259 :
251 :2008/09/29(月) 22:30:58 ID:???
だとしたら、Write前にStripかませば潰れるってことか。
>>256 お前は Image::Magic しか使ってないのか?
画像書き出しの基本を自慢気に書くなよ恥ずかしい
261 :
246 :2008/09/29(月) 22:56:00 ID:???
何かいろいろと荒れる原因を作ってすいません…
結果から言うと無事に減量に成功しました。
>>258 さんの言う通り余計な情報が入ってたからみたいで、
$image->Profile();
このコマンドを使って付加情報を消してみまたところ、元が200KBの画像もQuality75で4KBほどに落ちました。
>>251 さんの言うStripも試してみましたが、サーバーが対応してないのかしてエラーが…
何かあまりよく無い方法かもしれないけど、とりあえず減らせたのでこれでいってみようと思います。
本当はThumbnailが使えたら一番良かったんだろうけど…
皆様、どうもありがとうございました。
262 :
258 :2008/09/29(月) 23:41:26 ID:???
>261 お。そりゃえがった
thumbnailもstrip無いってよほど古いVersionなのか? くっついてるライブラリの問題?
264 :
246 :2008/09/30(火) 14:15:08 ID:???
>>263 ロリポップですorz
多分かなりバージョンが古いと思います。
ローカルのサーバーだとImage::Magickの最新版入れたからどっちのコマンドも使えるんだけど…
逆にProfileがエラーで使えず。
このどっちつかずの状態が非常に面倒だw
常に最新ライブラリが使えるなんて、自前鯖で自力で入換えできる人しか使えないと思った方が良いよ
管理者にメール投げれば対応してくれることもあるけど、期待はしない方が無難
267 :
nobodyさん :2008/09/30(火) 18:15:01 ID:WMNZymKE
perl勉強したらperlでwindowsアプリケーションもつくれますか?
269 :
244 :2008/10/01(水) 05:05:58 ID:???
>>245 assoc .pl=Perl
ftype Perl=C:\Perl\local\bin\perl.exe "%1" %*
と何度かしているうちに直った
ありがとう
PHPのように、Perlの記述をHTMLに埋め込むようなことを実現するライブラリ、 もしくはモジュールはありますでしょうか?
つApache::ASP
CPANからインストールしたモジュールを 他のサーバにもそのままコピーしたいのですが 何か良い方法ありませんか? 同じ環境を作りたいんです お願いします
>CPANからインストールしたモジュールを >他のサーバにもそのままコピー それをやればいいと思うよ
CPANのフォルダをそのままコピーで良いんですかw な、なんだってー知らなかったー
CPANのフォルダをそのままコピーしろなんて誰も書いてないわけだが
>274の書き方なら、>275の解釈が正しいんじゃないかなw
じゃあもうそうしろよ
Miyagawaとかその辺のレベルの話にまったくついていけないんだが・・・ なんつーか、自分のレベルの低さにげんなりすることってない? あのレベルにいくまでどのくらいかかるのやら。
>>279 知的レベルが普通なら、1週間くらいで。
>>279 自分のペースでええやん。
俺なんかああいう人たちが苦労して切り開いた道を、すこーし後ろから付いていくだけだから。
まぁ追い抜きたいなら止めないけど。
CGI::Liteと CGI:Minimalの 違いについてカンタンに説明してください。 ちなみにグーグルで検索しても 説明ページは出てきませんでした。
>>282 おまえ、プログラミングに向いてないわ。
perlモジュールの検索のコツはありませんか? モジュールたくさんあって、みなさんこれ全部把握してるんですか? 有名なところだけしか使わないんですか? 初心者ですみません
全部把握なんて無理無理w それっぽいキーワードで検索して引っかかったもの使ったり 必要なところだけ切り出して使ったりしてるだけ まぁ車輪の再発明と言われようが作ってみるのも悪くない。
検索のコツは「ほしい機能を英単語にして放り込む」とかじゃダメかね。 日本語でも「cpan 機能名」でググればけっこー見つかるけど。
>全部把握なんて無理無理w 安心しましたw 有名どころと使えそうなのが検索で出たら使う って感じですかね
>「ほしい機能を英単語にして放り込む」 これ良いですね試してみます
>>286 CPANの一覧表に一通り読んで、「おお、こんなものがあるのかそんなものもある
のか」とおどろきつつ大まかなところを掌握しておく。
……というのをやったのはもう数年前だな。
もう増え過ぎて困難になってるかな。
292 :
nobodyさん :2008/10/06(月) 08:23:17 ID:mCk9rMM2
掌握
把握じゃなくて掌握してしまったのか 巨大な敵は陰に隠れるというが・・・
294 :
nobodyさん :2008/10/06(月) 16:08:49 ID:4zLyyJ4I
掲示板を作成していてhtmlのformから受け取ったものをデコードする関数、 書き込みの条件を満たしているかチェックする関数、ログに書き込む関数、 と分けて #!usr/local/bin/perl &decode; ✓ &writelog; のようにしているのですがcheckからある変数を 受け取って他の関数内で使いたいとき皆さんはどうしてますか? グローバル変数でやろうとするとどうしてもグローバル変数がかなりの数に なってしまいますし、だからと言って($abc,$efg)=&xyz; のようにしてしまうと無駄な変数が増えてしまうしlocalでやるのも 結局、グローバル変数使ってるのとあまり変わらないような気がします・・・ 上記のように&decode;✓…のようなやり方自体がよくないでしょうか? 馬鹿みたいな質問ですみません。答えていただけるとありがたいです。
オブジェクト指向でやればいい use MYLIB; my $obj= MYLIB->new; $obj->decode; $obj->check; $obj->writelog;
>>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 ;
んー、構造体のようなものを作るのもアリなのかなあ……?
根本的にわかってない奴
299 :
nobodyさん :2008/10/06(月) 18:23:54 ID:mCk9rMM2
オールグローバルでいいじゃない。 掲示板くらい。
そのやりかたでやりたいのであれば、連想配列で渡すとか。 my %query = &decode; my $error1 = &check(%query); my $error2 = &writelog(%query); まぁグローバル変数もわかってないんだろうけど。。。
301 :
sage :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のまま )
どうしたもんか?
>301 もうちょっと推敲してから質問してくれ
ごば
( ^ω^)
306 :
nobodyさん :2008/10/07(火) 01:48:33 ID:YSCh74Wr
>>294 です。お返事ありがとうございます。
正直皆さんの回答を見ても知識不足のためよくわかりませんでした・・・
>>299 さんの言うとおり重さや綺麗汚い気にせずとりあえずグローバル使い
まくりで仕上げてみようと思います。答えてくださった皆さんありがとうございました。
>>305 進研模試でいうとfjがおよそ偏差値45、民放地上波は約40、
ニュース速報+は35程度を対象にしています。
成長しないタイプ
>>294 「データのリファレンスを受取って(デコード|チェック)済データのリファレンスを返す」ように各サブルーチンを書いておいて:
&writelog(&check(&decode));
チェックなんて何回もいらん 一回で済ませ
>>306 悪いこといわんから変数受け渡しで書いてみろ。
ハッシュ(参照)で受け取って、ハッシュ(参照)で渡せば、なんてことはない。
特に永続化環境(mod_perl等)ならグローバルを使うという発想はないと思ったほうがいい。
316 :
nobodyさん :2008/10/08(水) 02:25:08 ID:Ayb4NO8c
Perlなんて適当にくんだらいいんだよ
>>310-
>>311 上げ荒しの回答に納得する様な質問者には何を言ってもムダ。
例まで書いても参考にすらならんよ。
309だった。orz...
どうかどうかどなたかお願いします
ttp://oshiete1.goo.ne.jp/qa3380695.html このサイトで質問してる人と同じ質問ですが、
クッキーは使わず、複数のドラッグできる画像の移動したデータを他の人も移動後の状態で閲覧できるようにしたいです。
掲示板のスクリプトを利用して全部保存すれば、元からロックも付いてて便利だと思ったのですが、
座標を渡すことが出来ないので困ってます。
現在HTMLにジャバスクリプトで簡単な形を作って試しているのですが、
どうにも、保存のところで何もアイデアが浮かばない。
一週間、暇な時間に検索して回ったのですが、
解決策には出会えませんでした。
ジャバスクリプトで移動できる画像ファイル(img1~img6等)とコメント部を各画像毎に対応させた名前のボタンをクリックすることで
コメントと画像ファイルを保存できるようにしたい。
何か知恵を貸してください。
320 :
nobodyさん :2008/10/08(水) 05:57:55 ID:vsHGNNNA
>>294 です。グローバル変数はそんなに悪いものなのですか。
スクリプトが大きくなれば大きくなるほどスクリプト自体見づらくなるだろうし、
他人からすると見づらいかもしれませんが、無駄に変数作って無駄にメモリへの書き込み
増やすぐらいならグローバル変数使うほうがいいと思ってました。
変数の中身が同じ内容なら新しく書き込まず同じメモリを参照するということはないですよね?
皆さんが教えてくれた方法をいくつか試してやってみようと思います。
質問に答えてくださった方々ありがとうございました。
>>320 >>296 のように、リファレンスで渡せばコピーは発生しないよ。
直接中身を弄れるから、returnで返す事も要らない。
>無駄に変数作って無駄にメモリへの書き込み この考え方のが無駄
メモリのread/write負荷までちまちま気にして作らにゃならん「掲示板」って どんなんだろうとは思う。
Cならもっとメモリ気にしてアロケートしていかないといけないからまだまし
325 :
nobodyさん :2008/10/08(水) 16:11:59 ID:KrA4Ywcm
>>321 そうなんですか。自分はパッケージ?(Data::Dumper)というのは触ったことないので
これを機会に触ってみようと思います。
>>322 >333
仮に完成しても人が来るかもわかりませんが仮に来てくれて書き込みがあった場合
1回の書き込みでテキストから100行ほどの文を3つの配列によみこんでまた書き込みしなければ
いけないので変数受け渡しでやるとすごい負荷になるんですよね。
しっかりした知識があれば1つの配列で収まるかもしれないし
それ以前に配列だけグローバル変数にすれば済む話ですが。
とりあえずできる限りローカル変数にしてみようと思います。
326 :
296 :2008/10/08(水) 17:23:24 ID:???
……Data::Dumper は単にデータをダンプする物です。
掲示板の機能とかには関係ありません。
>>296 を全部コピペして、「コマンドラインから実行」してみてください。
%hash の内容が書き換っている事が分ります。
ある変数の値がおかしくなるバグが発生したとき、その変数を使ってる部分見直すことになる。 変数が一部分でしか使われていないなら、その使われている辺りを調べればいいけど、 グローバル変数の場合、最悪、全てのソースコードとにらめっこすることになる。 サブルーチンのテストするにしても、グローバル変数がどこで使われてるのか 分からないから、全ての変数を設定しないといけない。 そんな理由で、グローバル変数は定数ぐらいにして、捨てたほうが楽になるよ。 同じ理由で、一つのハッシュに詰め込みすぎるのにも注意してね。
>>319 掲示板と画像ドラッグを同列に扱うという感覚がよくわからない。
あるページに複数がアクセスしてるとき、誰が画像の主導権を握るの?
リアルタイムで動かすなら、Perlではどうにもならんから、AjaxとかASP.NETスレで訊いてみれば?
329 :
nobodyさん :2008/10/08(水) 19:13:15 ID:Ayb4NO8c
変数とかいうより、もっと大きな構造を考えた方がいい いくら変数をローカルにしたところで、無駄な処理やループが大毛りゃ話になりません
>>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ボタンでどう座標を保存するか・・
説明いまいちですか?
>>330 A,Bはそれぞれ自分専用の画像を動かすってこと?
ま、いいやw
座標をクエリ文字列にしてURLにして送信ってとこまではおk?
JSONにして送信してもいい。
基本的にJavascriptの質問な気がする。。。
>>331 レスありがとうございます
調べて、やってみます;
スレ違いかもしれなかったのに、どうもありがとう
333 :
nobodyさん :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エンコードされたメールなども処理するので、できれば使いたいのですが。
334 :
nobodyさん :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が必要だとかはありませんか?
ご教授、よろしくお願いします。
そもそも use Apache::Request; が無いが・・・
perlでyyyy/mm/dd hh:mm:ssみたいな文字列から、timeで得られるような値を取得する方法ってありましたよね? たしかモジュールで提供されてたと思いますが・・・
>>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+)$!);
モジュールならDate::Parserとかで探してみたらいい。
341 :
nobodyさん :2008/10/17(金) 17:00:00 ID:M5nni1qD
プレースホルダを使用して、executeからバインド変数で値を送ると、 変数内の末尾のスペースが全て削られて、 実行されてしまうのですが、同様の事象を経験した人いませんか?
>>342 Windows95の入門書のようなもんだと思います。
Perl自体がそろそろ古さが否めないような気がするけど、そうは思わないなら問題ないでしょ。
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で正常にダウンロードする方法があれば、どなたか教えて頂いてもよろしいでしょうか? よろしくお願い致します。
ファイル名変えたほうがいい。変えて損はないと思うが?
最後の.以降しか拡張子みないのに キャッシュは最初の.までしかファイル名としてみてないのか・・・ やっぱりあほだな>IE
ファイル名にドットとかスペースとかカンマとか演算子とか気持ち悪い A-Za-z0-9_ な範囲でいこーぜ
349 :
345 :2008/10/19(日) 22:03:33 ID:???
>>346-348 どうもありがとうございます。
やはりIE特有のバグみたいですね・・・
Content-dispositionを使うと強制的にShift-JISになったりと、IE何か微妙すぎるよorz
今までの書式が2000.01.01のような形だったので、出来ればそのままが良かったのですが・・・
せっかくなんでファイル名を変えるようにしてみます。
皆様、どうもありがとうございました。
350 :
nobodyさん :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
(つづく)
351 :
350 :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のデータには機種依存文字も含まれているのですが、それも出力されました。 これでいいのでしょうか?
352 :
350 :2008/10/24(金) 17:51:40 ID:gaOQS66Z
補足 上のソースはutf8で書きました。
353 :
y :2008/10/26(日) 01:17:05 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"; # 代入先
}
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; }
POSTが受け取れないんじゃなくて実行エラーになってないか?
$a, $bは使うなと(ry
Tripletailって使ったこと無いけど設定ファイル指定するとこ/dev/nullでいいの?
activeperl使ってるときは perlのパスは以下のとおりにするといいよ #!C:/perl/bin/perl
>>358 Tripletail::Template::Node#expand: the value for key [NUM] is not defined. (key [NUM] の値が指定されていません)
と表示されます。
掲示板を作ろうかと思ってるんですが datに書き込んだログデータを読み込む場合って 配列、変数、連想配列、 どれに読み込むのが読むのも吐き出すのも早いですか?
スカラーが速いだろうけど差が出るにしても倍も違わないだろうし 一度の実行で何度も繰り返すわけじゃないからどうでもいいレベル 結論を言うと後で見てもわかりやすいようにバグの入り込む余地がないくらい手堅く書くのがいいかと
365 :
nobodyさん :2008/11/02(日) 21:30:21 ID:Tjmw1r4y
ごめん、
>>363 は書き方が悪かったかも。
スカラー、配列、ハッシュ、
どれが掲示板のログデータを読み出し吐き出しすることに向いてますか?
って質問です。
>>364 なら配列の方が手軽でよさそうですね、ありがと
DBD::SQLiteが楽な気もする
個別のデータをテキストファイルとして抜き出すのに適さない 小規模掲示板レベルであればテキストファイルにしてインデックスを用意したようが扱いやすい DB は確かに扱える人からすりゃ便利すぎて他の考慮の余地ないかもしれないが、全ての環境で DB が動いてる、導入されてると思うな。って思うんです。
いや、SQLiteだからなぁ・・・
カラムの変更があったとき面倒くさくない? >CSVテキスト
タブ句切のデータを data[335]->{'time'} みたいに扱えるようにしてるからさほど苦労はない ただ多岐に渡るデータの全文検索とかになると TSV の場合 数千件のデータすらタイムアウトになるから 全データを1つのファイルにまとめた検索用データを作ったりと、ソースがみすぼらしくなるw
あー、そっか。 一行目をカラム名にして $index{'カラム名'}=左から何列目 といいきかせ、 次の行からは @hoge に split でそーにゅーして、 $hoge[$index{'カラム名'}] でいぢくれば、 表に変更があっても保守楽かなぁ。
そんなことせずSQLiteにしたらいいのに、、
>>372 レンタルサーバーの場合は何を使えばいい?
いやだからSQLiteだってばwww
SQLiteはサーバーを必要としない組み込みのDBだよ
そこじゃなくて、モジュールインストールできんのかっつーとこじゃねーの?
>>376 適当な場所に置いてuse libで良くね?
DBD::SQLiteはSQLiteはいってないとダメじゃ?
Cのコンパイラだけあればファイル揃ってなかったっけ? あとDBD::SQLiteよりDBD::SQLite::Amalgamation使ったほうがよくないか それにしてもパッチあてないといけなかった気がするけど。
>>379 要りません。ていうかDBD::SQLiteはperl用SQLite込です。
仕事だと、既にレンタル鯖借りちゃってるんでここで、みたいなクライアントがたまにいる 鯖変更の交渉も含め、金額に見合った仕事をするようにしないとなぁ、と思う。
ロリぽやさくらでもSQLiteくらい入ってるぜ?
小さい会社でドメイン取得が流行ったころに借りてるところって、 Perlのverが5.6以下だったりするところけっこうあるんだよなぁ。 どちらにしても会社のサイトがロリポはないよね。名前的にw
5.6以下って5.6ならいいじゃん。 まーPerl5ならなんとかなる。5未満は死んでくれ・・・
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"}; です。
成形した$sqlを表示してみそ
388 :
386 :2008/11/08(土) 01:05:43 ID:???
ゴメン、 上のはなかったことにしてください。 keys %{$hashref} と (join ',', '?' x scalar(values %{$hashref})) は間違い。
389 :
386 :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 バイトです。
390 :
387 :2008/11/08(土) 01:28:36 ID:???
ハッシュの順番は保証されてないっしょ
391 :
386 :2008/11/08(土) 01:43:51 ID:???
>>387 keys で返ってくるキーの順番は保証されないけど、keys と values が同じ順番で返ってくるのことは保証されているのでは?
keys, values, eachは同じ順番で返ってくるのが保証されてるから大丈夫
しかし、
>>386 とかみたら疲れるよなぁ。
複雑な演算をしないなら
>>371 みたいに原始的なほうが扱いやすい。
394 :
386 :2008/11/08(土) 16:02:05 ID:???
DBはまだ使い慣れていないので、今はテキストファイルを
>>371 のやり方か、
↓のやり方で扱ってます。
my @column = qw(id name);
my %data;
@data{@column} = split /\t/;
my $id = $data{id};
細かいツッコミしちゃうと
>>371 だとぅまく扱えないんだけどねw
396 :
nobodyさん :2008/11/09(日) 01:11:14 ID:tiuPBzgU
すいません。perlと直接関係ないんだと思うのですが、hotmialのアドレス帳のexportする際のcsvファイルを自動で取得したいのですが、 これはどうやったらできるのでしょうか? mailaddressとパスワードが20セットあり、それのアドレス帳をPGで自動取得したいんです。 同じ事を経験された方いらっしゃいますか?
398 :
386 :2008/11/11(火) 11:21:11 ID:???
再度質問なのですが、DBD::SQLite を使って作成したベータベースは、どこに存在するのでしょうか? よろしくお願いします。
connect 時のdbnameがファイル名
400 :
386 :2008/11/11(火) 12:18:50 ID:???
そんなん聞いてません PATHがどこか聞いているのだよ
だから自分で設定したとこだよ 書かなきゃカレントだろーが
386はファイル名にはPATHも含まれていることがわからないバカか
まあ386では処理能力の限界かもしれないw
404 :
386 :2008/11/11(火) 14:04:05 ID:???
カレントってどこから見てのカレントだよバカチン それぐらいも書けないなら解答すんなチンカス
もう放置の方向で ここで答えたら「チンチン言ってたら答えてもらえた」と思ってまたそうするだろう。
いきなり
>>403 を読んだのでCPUの話かと思ったw
407 :
386 :2008/11/11(火) 14:56:38 ID:???
簡単に偽者に踊らされるお前らがかわいいw
408 :
486 :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するたびにタイムスタンプが更新されます。
これは、どうなっているのでしょうか?
409 :
V30 :2008/11/11(火) 22:03:12 ID:???
頭の回転が遅すぎて、何言ってるか理解できないです><
>>408 環境は?
実体は別のとこにあるのかもね
ってWindowsXPか。 リンクでもVirtualStoreでもないな。
412 :
r :2008/11/12(水) 12:10:00 ID:DKrfzJ/y
内容をフラッシュして閉じてください
413 :
s :2008/11/12(水) 12:10:26 ID:DKrfzJ/y
そうすればたぶん
414 :
k :2008/11/12(水) 12:10:49 ID:DKrfzJ/y
データが書き込まれると思う
Winじゃないけど同じようにやったらdbname:mydbみたいなファイルになったぞ Winだと:はドライブ名の指定にしか使えないんじゃなかったっけ。 Eドライブにもファイルできてるかもな
ヒント:NTFS ストリーム名
ああ、確かに副次ストリームなら見えてるファイルの容量は変わらんわw
そういうことかw
Perl初心者です。 TripletaiLを使用して、CSVにデータを追加出力がしたいです。 Tripletail::CSVとTripletail::Filter::CSVが有るようですが、 画面上には何も表示なく保存又は上書き保存がしたいです。 良い方法はありますでしょうか? ご教授御願いいたします。
Tripletail::CSVかTripletail::Filter::CSVを使えばいいんじゃないかとおもいます
TripletaiL ってどうなの
423 :
nobodyさん :2008/11/23(日) 20:39:20 ID:bs2lqy3V
my $hoge = new Hoge; と my $hoge = Hoge->new; は同じですか?同じだとしたら何故二つの呼び方があるのですか?
その2つの例文に関して言えば同じ。引数を渡そうとすると後者になるが、まぁ趣味。 で、何故かについてはLarry Wallに聞いてくれ。
my $hoge= new Hoge, 1; 確かにこうやっても値渡らないね
my $hoge = new Hoge (引数); なら行けなかったっけ? 最近この書き方していないからうろ覚えだが。
個人的にだけど、インスタンス実行するときは $obj = new Hoge ってして、メソッド実行するときは $obj->something(); ってしてるな。
perl (笑)
>428 ウォール(笑)
$obj = Hoge::newは?
$obj= Hoge::newだと第一引数にHogeが渡らないから $obj= Hoge::new('Hoge');にすればいいかもな
前者でも普通に引数渡せるだろ…つか、渡せない訳ねえだろ > オレ。 確かめちゃったじゃんか。 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 ;
はじめまして。 特に、言語はPerlに限ったことではないんですが、CGIでソケットを使いた いのです。 そこで質問ですが、レンタル・サーバーで、独自にポートを開くことは 可能でしょうか? 禁止されていて開けない可能性はありますか? レンタルサーバー上で、CGIで独自にソケット/ポートを利用したプログ ラミングの例はあるでしょうか?
レンタルサーバでソケット通信許可してるところはまず無いと思ったほうがいいよ
1人で占有するレンタルなら使えるかもしれん
438 :
nobodyさん :2008/11/26(水) 12:35:57 ID:y5MzewIk
共有鯖は駄目と思ったほうがいい 1台まるごと借りるサーバーなら大丈夫だとは思うけど、そんなんだったら自鯖立てたほうがいいよ (ちゃんと管理できるならね)
有識者のみなさま、いろいろ調べたのですが、解決できないのでお力をお貸しください。 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); (終了)
$image = Image::Magick->new; open(IMAGE, 'image.gif'); $image->Read(file=>\*IMAGE); close(IMAGE); って公式にあるだろ…、それとファイルハンドルのなんたるかが きちんと扱えればどうにかならないか?
441 :
nobodyさん :2008/11/27(木) 23:22:00 ID:cBVqxC3+
だからメモリ上だけで完結したいと書いておるだろうにバカチンが
BlobToImageでぐぐれ
みなさまアドバイスありがとうございます。今帰ってきました。 おっしゃるとおり、ファイルハンドルの何たるかを知りません。 socketに格納されてるバイナリデータをどうやって変数に代入すればいいのか わかりません。変数に代入できれば先に進めそうなのですが。 バイナリデータをBlob形式に変換できればBlobToImageでできそうですね。 今日、調べてみます。
Image::MagickのReadにソケット突っ込んだら、例外吐いて落ちた。ワラタ。 BlobToImageが一番安全っぽい。
>>441 $image->Read(file=>\*SOCKET);
メモリだけで完結するじゃん(落るらしいから意味ないけど)
携帯からなんでいろいろ自信がないんだけど… 一旦ファイル作っちゃった方がサーバーに優しくない?って気もするけどなんでオンメモリ何だろ? ファイルハンドルになっちゃえばImageMagickで処理出来るよね? こんな感じのできなかったけ? my $buff; open my $fh,'+>',\$buff; print $fh <SOCKET>; seek($fh,0,0);#fseekだっけ?
「オンメモリにあるもんを態々ファイルにして、それをオープンしてオンメモリにする」 方がサーバに不可が掛らんと主張してるんだぞ君は。
448 :
nobodyさん :2008/11/28(金) 10:49:59 ID:f7u8ti6k
またメモリに読み込むのに DISK I/O 経由の処理を加えたほうが優しいのか? いつの時代からメインメモリより DISK および DISK I/O の方が処理コスト安くなったの?
量の問題だろ
株式チャートのPNG画像なら、大きくても100kバイト程度だと思うが、 それで問題あるなら、Image::Magickを使用することから見直した方がいい。
まだreadしてないんだからkernelがメモリ使ってるかもしれないけどperl的にはオンメモリじゃないよね? ReadもBlobToImageもだめみたいだったので SOCKETから一回取り出してperlでバッファリングして imagemagickの中でもバッファリングして と無駄が多いなと感じて書きましたが 言われてみてればたしかにたいしたサイズでもないですね
452 :
nobodyさん :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');
439です。 452さんの回答で出来てしまいましたね…。すごいです。 my $data = $response->is_success ? $response->content : undef; ↑の部分をSOCKETで実現する方法を実装できなくて悩みまくりました。 (SOCKET画像取得処理) my $data = SOCKETで取得した画像 ↑を実装する方法は引き続き勉強します。
無理にSOCKET使わなくても…
>無理にSOCKET使わなくても… まあ、そうなんですよね。 SOCKET使える環境で必ずLWPを使えるのであれば(よく知りませんが…)、 ほとんど意味ないですね。処理性能面でSOCKET優位等の理由がない限り。 みなさまのおかげでやっと実現できました。ありがとうございます。
キチガイ回答者のグダグダがたまらんスレだなw
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を動かすにはどうすればよいのか分かりません…。
458 :
nobodyさん :2008/11/30(日) 02:09:05 ID:o6oyERaL
まずね、○に数字の文字は使わないように (3) は src には PATH であったり URL を指定すべきところにバイナリを出力してるから (2) は t?s の部分をエスケープしてみたり、<!---- をちゃんと書き直してみたりしたらどうでしょう?
HTMLは画像バイナリデータを解釈できないから、 img要素などを経由させるしかない。 つか、(0)をSSIに書いとけばいいんじゃないのか?
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の方をいじらないとだめそうですね。ありがとうございます。
> まずね、○に数字の文字は使わないように なんで?
>>462 バカにいちいち構わずほっといてやれよw
変なことをしていないかぎり、モジュール内のメソッドで、 newのみがクラスメソッドで、それ以外のメソッドがインスタンスメソッドだと思って間違いないでしょうか?
そんなルールはない
466 :
nobodyさん :2008/12/06(土) 14:04:47 ID:nchXLVyQ
new aaa と呼び出した時 aaa のなんのメソッドが呼ばれるの? aaa->new は new が呼ばれてるのは分かるけど …
#!/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;
>>466 書き方が違うだけでnewを呼んでる。
new aaa ; # 間接オブジェクト記法
aaa->new ; # 直接オブジェクト記法
{ package Foo ; sub new { bless {}, shift } sub get { "hoge\n" } }
print Foo->new->get ; # 直接
これを間接で書くと
print +( get { new Foo } ) ;
470 :
nobodyさん :2008/12/07(日) 00:51:48 ID:5kiTreoU
なるほど 明示的に書いてやるかどうかの違いなワケっすね
471 :
nobodyさん :2008/12/08(月) 22:17:51 ID:H0AbHxek
my ( $user, $addr ) = split /(?=@)/, $mail
473 :
nobodyさん :2008/12/09(火) 00:53:33 ID:1e6/3LhQ
\@ で大丈夫しゃない?
@mail.comじゃなくてmail.comでいいならね
476 :
nobodyさん :2008/12/09(火) 11:16:40 ID:1e6/3LhQ
@ が1つしか存在しないであろう文字列を split してるんだから 分離後の後者側には @ はいらないでしょ それに分離するってことはホスト名が欲しいワケだよね? だったら @ は邪魔なゴミじやない?
use strict してなかったお前がバカだw
478 :
nobodyさん :2008/12/09(火) 14:29:32 ID:D4e6X4gI
>>472 できました!
ありがとうございます
@も含めて抜きだしたかったんです。
479 :
nobodyさん :2008/12/09(火) 23:43:03 ID:ope7KV64
hello worldを表示するcgiを作りたいのですが 本や入門サイトをあちこち見ても書き方が違うのです。 こちらの常連様方はどのように書いてますか?
print q aHello worlda
@echo off echo content-type: text/plain echo. echo Hello World これで出る
>>479 色んな書き方があると分かったなら、それも進歩のひとつです。
その書き方だとhtmlで出力したことにならないね
>echo. この . 忘れると、echoはoffです。が出るんだよなw
whileの条件式に<FILEHANDLE>とすると$_に暗黙的に代入されますが、 IO::Fileみたいなオブジェクトで$fh->getlineとしても$_に代入されません。 暗黙的に$_に代入させる方法はないでしょうか
お前さんの言ってるgetline methodは恐らくIO::Handleのgetlineの事だろう。 で、お前さんの言ってる事がやりたくて、先人様がIO::Fileと言うラッパを生みだしたんだ。 use IO::File ; my $fh = new IO::File; if ($fh->open("< file")) { while ( <$fh> ){ print ; } $fh->close; }
継承してるからIO::Fileでgetlineも使えるんだね。 失敬。
明示的に変数に入れないと気がすまない性格の俺からすると $_ を積極的に使いたがる人のスクリプトはなんかヤダw
俺は$_で済むものをいちいち自前の変数つくって入れる人のスクリプトなんてだるくて嫌だなw
プログラミング言語では明示的に宣言するのが普通だな 文字数制限があったBASICの時代ならいざ知らず
他の言語無関係に。 シュワルツ変換とかで↓みたいなコードを曝されたらねえ、、、 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 ;
>489 貴様、ラリー先生ですね!
Perlの時代来てるのになんか盛り上がらんなぁ
で、japタンはもういないの?
入力した文字を音声化するモジュールってありますか?
498 :
nobodyさん :2008/12/12(金) 23:59:34 ID:t4dUYMwZ
文字の入れ替えをスマートに書きたいのですが。 たとえばABCという文字の1番目と3番目を替える場合 $hoge = "ABC"; $s1 = substr($hoge,1,1) $s2 = substr($hoge,3,1)
途中で送信してしまいました。 $hoge = "ABC"; $s1 = substr($hoge,1,1); $s2 = substr($hoge,3,1); substr($hoge,3,1) = $s1; substr($hoge,1,1) = $s2; で、できると思いますが、もっとスマートなやり方はないでしょうか?
2行削ってみた $hoge = "ABC"; $s1 = substr($hoge,1,1); substr($hoge,1,1) = substr($hoge,3,1,$s1);
スマートというのが行数少なくすることなら正規表現で
$hoge =~ s/^(.)(.)(.)/$3$2$1/ ; ちなみに君の書いたコードだとACB
$hogeが三文字固定なら $hoge = reverse $hoge ; じゃなきゃ substr $hoge, 0, 3, reverse substr $hoge, 0, 3; ちゅー手も。
>>501-503 深夜ありがとうございます。
文字数は非固定で、入替える文字もランダムですので、正規表現は無理そうです。
>>ちなみに君の書いたコードだとACB
確認せず書いてすみませんでした。
$hoge = "ABC";
$s1 = substr($hoge,0,1);
substr($hoge,0,1) = substr($hoge,2,1,$s1);
ですね。
もうちょっと考えてみます。
正規表現ではムリでsubstrでは書けるコードっていまいちルールがわからんなぁ。。
> Perlの時代来てるのになんか盛り上がらんなぁ Perl が来た時代なんてあったのか?
質問です。よろしくお願いします。
ttp://www.hamakin.net/search/my_page_rank.html このツールみたいに演算中に「演算中」と出しておいて終わったら
結果を表示したいのですがわかりません。。
これみたいなキーワードチェックツールを作っていてツール自体は
作れそうなのですが、「演算中」表示が解決できず困っています。
本当は、「演算中」ではなく、「10位まで終了」「20位まで終了」
としたいのですが、どちらもさっぱりで。。
それはperlの質問じゃないっぽいな。 だいたい、本当にそんな時間かかってるなら鯖の負担が大変だw
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); 実際の操作が一回ならアレだけど、複数回適用するなら配列の方が楽。
507のツールは☆が回ってる間って10秒くらいだけど、サーバの負担って すごいの? レンタルサーバでやろうとしてたんだけど、迷惑かな。。
ajaxじゃねーの どうでもいいが
>>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)));
なんて事までできるのですね。
どれが一番よいかベンチとって、使用したいと思います。
507です。 ソースみるとjavascript使ってないんです。いっこも。 perlかどうかは分からないんですが。 「10位まで終了」「20位まで終了」 ってのは無理なのかな。。
>>507 見たけど、本来直接結果を表示できるところを、演算中と表示させるだけのcgiを間にはさんでしばらく表示し、
metaタグで結果ページのcgiに移動しているだけのようですね。フォームデータはそのまま結果ページcgiに渡すと。
★が動くのはアニメgifでしたよ。ワンクリ詐欺の技法。
まともに経過を表示させる方法を書こうと思ったけど、板違いなのでやめました。Webprog板へどうぞ。
507です。 514さま。感謝です!演算中表示はできましたです! cgiをはさむってのは思いつきませんでした。 板違いでなければ、経過表示もお願いしたいのですが。。 あと、共有サーバでやるべきかどうか、どう思いますか??
stringifyとかwantarrayってどこで定義されてるんですか? 後者はperldoc -fで出るけど前者は出ないしググっても全然情報がないす
>>518 ありがとうございます、探してみます。
stringifyはcatalystで $c->path_to('hoge/huga')->stringify とかしたときのが知りたかったのでcatalystのソース読んでるところでした
package Catalyst に sub path_to があるところまではわかりましたか。 その path_to のなかでつかってる Path::Class::Dir, Path::Class::File に それぞれ stringify メソッドが定義されているよ。
今そこ読んでるところです。 依存モジュールが無いのでこの程度なら頑張れば読めそうっす ありがとうございました。
依存モジュール無いじゃなくてFile::Specとかありました><
全部よもうとせずに必要なところを少しずつ読むといいかも。
あとは、初めて目にするモジュールがあれば、
CPAN で検索してみればいいんじゃないかと思う。
http://search.cpan.org/ 死にゆく言語だががんがってくれ!
死にそうなんじゃなくて枯れてるだけです><
>>523 今後伸びていく言語は何だと思いますか?
527 :
nobodyさん :2008/12/16(火) 13:59:20 ID:vcMtnNeb
mod_rewrite の範疇なので、鯖板の方で聞いてみては如何でしょうか?
>>527 それPerl関係ない。
Webサーバでそーゆー風に処理している
でも、何で区切り文字だけ変えるんだろう。折角なら、.htmlにした方がSEO対策としては良くね? スレ違いスマソ
>>527 例があやしすぎるが、、、
PATH_INFO使ってんじゃないの?
533 :
532 :2008/12/16(火) 16:02:23 ID:???
ああ531見えてなかった申し訳><
use overloadについて詳しく解説されているサイト、 もしくはoverloadを有効に使っているモジュールを教えてください。
DateTime
>>535 使用例としては、Math::BigIntが面白いと思う。
process '.padbottom .padbottom a', "link[]" => '@href'; って書けばよさそう。 いろいろ省かずに動くコードを gist に貼ってよ。
cronで走らせてるperlスクリプトを、時々任意に走らせたいときがあって、 webブラウザにアドレスを入れて、CGIを直接叩いているのですが、HTMLを返さないので、 ちゃんと実行されるものの、当然500エラーになります。 シェルから走らせてるか、HTTPで走らせてるかを判別できるような環境変数などはありますか?
$ENV{GATEWAY_INTERFACE}=~ /^CGI/ が真か偽か
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
546 :
nobodyさん :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;
できたけど?
548 :
nobodyさん :2009/01/11(日) 23:52:30 ID:lrs+Aq7A
えーそうですか…。 どうしてだろう。
>546 \nでsplitしたんだからそりゃそーでしょう。 print "$_\n";
$|って何だろと思ってperlvar見て検索に引っかからなかった。 何故かパイプが全角だった。,とか\は半角なのに。 perl-5.8.8-15.el5_2.1
551 :
546 :2009/01/12(月) 01:18:39 ID:???
>>549 ありがとうございます! 気持ちよく眠れます!
Active Perl v5.10.0 Binary build 1004 の場合、無くても動いた。 バージョンによって違うのかねぇ。
winなんて知らんけど、\nじゃなくて\r\nだとか でも\rだけで改行されんのかな
Win32::Clipboad経由では、改行が\x0d\x0aのまま渡ってきていたから、 splitかけても、各行の最後に\x0dが付いていた。 結果、左に復帰するけど、下にフィードしない。 ただし、1秒ごとに出力はされる。 という感じです。
546です。みなさんのおっしゃる通りです。 指摘されたように、print "$_\n";で応えてくれたので、 \r\nでsplitしました。
556 :
nobodyさん :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 の仕方がいけないのでしょうか??
教えてください!!
557 :
556 :2009/01/14(水) 12:12:28 ID:OW2Unehd
CSVファイルのサイズは1MBくらいなので、 サイズが大きすぎるということではないと思うのですが、 何か分かれば教えてください!
まず、CSV処理がない部分のみでの挙動はどう? あとはbinmode(DATA)もやってみてはどうだろう。 EUCの場合も試してみては?
$line .= decode('CP932', <DATA>) while ($line =~ tr/"// % 2 and !eof(DATA)); ここの行がだめな気がする
その手のエラーって処理系のバグ踏んだかメモリ使い果たしたかぐらいだろ。 環境晒したほうがいいかもね。windowsっぽいメッセージなので俺は力になれ んと思うけど。 558の言うようにbinmode使えというのは同意。IOレイヤ使った方がいちいち 自前でencode書くよりすっきりするよ。元のプログラムいじるとこも最小限に なるし。
5.8.8が無いので確証は無いけどメモリ使い果たしたエラーだと思う、多分。
メモリ使い果たすようなコード書くんじゃねー粕
俺なんて、レンタル鯖で3MくらいのCSVファイルをDB代わりに酷使してるけど、問題ないぜ
ようはコードの書き方次第
Perl6が都市伝説と聞いてやって来ました。
ダブルクォートがひとつ足りないだけで、永久ループになるんじゃないか? OSがWindowsなら、ローカルで動かしてるか専鯖なんだろうし、 ファイルを全部読んでからText::CSV_XSで処理した方が楽だろう。
たとえダブルクォートがひとつ足りても足りなくてもファイルエンドになればループ条件を 満たさずにループから抜けるだろ
ああ、確かに。 呆けてた。
while (my $line = decode('CP932', <DATA>)) { これって decode の結果がループ条件でしょ? ここを while (my $line = <DATA>){ my $utf8str = decode('CP932', $line); みたいに分けたほうが・・・ あと、<DATA> で回してるのに、その中で <DATA> で読み込むのはやめた方がいい これは作り方が間違えてるとしか・・・
わかって無い人が書いたらこうなりましたって典型例
572 :
nobodyさん :2009/01/14(水) 21:10:32 ID:VxBaEqTh
パールイズフリーダム〜〜〜
Active Perl 5.10では再現できず。
Perlのバージョンが単に悪いのか 動作環境が悪いのか 都市伝説が原因か 謎は深まるばかりです。
Perlは、「謎」という言葉でソースの悪さをごまかせる素敵な言語ですね!
あるクラスの中で、他クラスのサブルーチンを定義することは可能ですか? イメージ的にはこんな感じです。 package main; sub Hoge::say_hoge = sub say_hoge {warn "hoge\n"} Hoge::say_hoge();
>>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__
ただしこんな事をしなければいけないようなら設計が悪い。
モジュールは単体で簡潔するべきかと
完結
Sub::Install::install_sub({ code => sub {warn "hoge\n"}, into => 'Hoge', as => 'say_hoge' });
自由にやるならClass::MOP辺りが面白いと思う。
1.txtの中身 a b c 2.txtの中身 d e f ↓一行おきに2.txtの中身を挿入したい a d b e c f 先生教えて!
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; }
FileHandle使わんでもできるだろwww
> FileHandle使わんでもできるだろwww FileHandle なり何なりを使わない場合の利点があれば教えて欲しい。
無駄に CPU 使うからイラネ
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; }
無駄に CPU 使うからいらないという理由をもってくると、 use strict; つけることすら無駄になるよね。 どうなのそれ。
え、俺デバッグ終わったらstrict外すけど
えぇええええええええええええええええええええええええっ!! strictはプラグマだから負荷かからないと思ってたけど違うの? 数値的にどれくらい負荷になるの?
3日後に読めないような汚いコードしか出てこないスレだし use strict してなくてもかまわんかもしれんなw
http://naoya.dyndns.org/~naoya/mt/archives/000892.html 以下コピペするよ
> ところで、気になるオブジェクト指向実装における Perl スクリプトの実行
> 速度ですが、Damian Conway 氏による『オブジェクト指向Perlマスターコー
> ス―オブジェクト指向の概念とPerlによる実装方法』の序章にこうあります。
>
> > 一般には、オブジェクト指向Perlによるシステムの実装は、それと等価の
> > 非オブジェクト指向実装よりも高速になることはなく、実際には比較して
> > 通常20〜50パーセントほど低速になる。
> > この数字はオブジェクト指向Perlから多くのユーザを遠ざけるほど十分に
> > 大きいかもしれないが、オブジェクト指向の設計面および実装面のそれを
> > 補うさまざまなり点を見逃すのは悲劇的である。
> > (中略)
> > 残念ながら多くの人は、「20〜50パーセントの低速化」という数字に惑わ
> > され、過去6か月間でプロセッサ速度が2倍になったにもかかわらず、何を
> > 意味しているか忘れがちになる。
今 perl 使ってる人って、 (1) CGI を速度重視で修行のように書く perl (2) Moose とか使う oop perl のどちらかだと思う。 (1) で use strict なしとかだと首つるしかなくね?
use strictなしで正しいプログラムを書ける人には不要らしい。 俺には無理。
use strict 不要派って、 「趣味のプログラムだから、最悪バグっても構わない」 的なこと書いて逃げるよね。 どうしようもない奴らであることは確かだな。 馬鹿はおとなしくマークアップエンジニアとかやってればいいのにな。
use strictしないで作ったショッピングカートで注文受けてるわw
俺はKENT様が作ったショッピングカートを使ってる
KENT って書くと笑いが取れると思ってる? つまんないから馴れ合い irc で引きこもっとけよ。
>>601 DBがプレーンテキストのカートシステムで注文受けてる
>>604 もちろん同じですよw
客の個人情報もテキストだよな?
流石にhtaccessでアクセス制限は敷いているが
htaccessで? httpdから見えるところに置いてるのか
>>605 売り上げ毎に個別のID付けて、売り上げデータだけサーバに残し、
個人情報は残さない。
個人情報+個別IDをメールで自分に送る。
>>606 レンタル鯖なんだから、httpdから見えないところには置けない・・・と思う。
>>607 メールで個人情報送るのって、案外危ないのでは?
俺は客宛に自動送信するメールにも、住所とかは完全な形では書かないよ
>>608 httpd から見えるところにデータ置いておく人のやることは矛盾だらけだということがわかった。w
>>608 root
web
log
みたいなディレクトリ構造になってないの?
>>610 確かにそんな感じだから、やろうと思えばできるのかなあ・・
>>608 ヤフオクだって取引ナビはSSLではないしね
大量に抜き取られる心配は無いね
>>611 > やろうと思えばできる
じゃなくて、できないのなら廃業するべき。
レン鯖を使うところがそもそも間違ってるんだけど、安全な自鯖を立てる技術がない以上、 レン鯖を使うのが今の俺に取ってはベターだとは思ってる。 最悪、なにか事故が起こったら謝ってしまえばいいだけ。 本題に戻れば、カートをどんな方法で動かしてるかとか、内部仕様的なところは客には見えないから、 ちょっと見栄えのする画面だったら何でもいいんだよw まあレン鯖だということは分かっちゃうことになるけど、そんなこといちいち調べて買い物しないでしょ?
>>614 わざわざ負け犬表明しなくていいですよw
616 :
612 :2009/01/19(月) 13:36:00 ID:???
よく考えたら、メールは大概 SSL/TLS で暗号化されているか。
> 本題に戻れば、カートをどんな方法で動かしてるかとか、 > 内部仕様的なところは客には見えないから、 どこかで配布されてるスクリプトをちょっといじっただけの程度なら 内部仕様バレバレでっせw もうすでに流出してるかもわからんね。 クレカの大量不正利用がある日起こってみんな気がつくとw
>>616 > よく考えたら、メールは大概 SSL/TLS で暗号化されているか。
デマですか?
>>616 客のIDとパスワードが、何らかの理由で漏れたときに、注文時のメールアドレス変えて
第三者に漏れる可能性があるかなという理由なんだよ。
>>617 スクリプトは1から自分で書いたよ。だから怪しいわけだけどw
クレカなんて扱わないよ、そこまで大規模なら、システムにも金かけるでしょ。
低脳なウェブエンジニア(笑)の皆さんがいると聞いて飛んできました
> クレカなんて扱わないよ、そこまで大規模なら、システムにも金かけるでしょ。 クレカ扱うと大規模なの?w
623 :
612 :2009/01/19(月) 13:49:40 ID:???
>>623 でも常連客でも会員登録してくれない客はいるね。
弱小だから、信用されてないのは仕方ないけど。
でも、会員登録の有無は関係なく、個人情報がサーバーに残ってることを客は知らんわなw
> でも、会員登録の有無は関係なく、個人情報がサーバーに残ってることを客は知らんわなw 客を馬鹿だと思ってるの? キミは何も知らないようだから、クラックされるなり変な script 注入されるなりして痛い目にあえばいいと思う。
そういえば、つまらない対策だけど、想定外の動作をしたときに、 店宛にエラーの内容をメール送信する機能つけてるわ
> 最悪、なにか事故が起こったら謝ってしまえばいいだけ。 とか言う人が > そういえば、つまらない対策だけど、想定外の動作をしたときに、 > 店宛にエラーの内容をメール送信する機能つけてるわ そんな機能つけてどうするの?自信ないの?腰抜けなの?
いままで気にしていなかったけど、 Amazonは余裕で個人情報+購入商品のメール送ってくるのなw
>>614 なんで共有鯖の次が自鯖なんだよwwww
占有鯖は考慮無し?
ここまでおれの自演
人格障害乙
>>628 本当は住所は書いたメールを送りたい。間違えて入力する客がたまにいるから。
でも、住所を書くことのリスクを負うことを考えると、やっぱり書けないね。
間違えて入力する客が悪いんだし。
> でも、住所を書くことのリスクを負うことを考えると、やっぱり書けないね。 > 間違えて入力する客が悪いんだし。 論理が一貫していませんよ。
>>628 今までの流れ見ると
「アマゾンでさえやってるから、いいんじゃね?」
くらいの発言がほしい物だ。
それから、オンラインショップのアドレス晒したうえで、 「クラックしてみろ」とか「保存してある個人情報抜けるなら抜いてみろ」とか ほしいものだ。 結局小心者の腰抜けなんですね。わかります。
・use strictする ・配布スクリプトは使わない ・プレーンテキストで保存しない ・ファイルならhttpdから見えないところに置く ・メールに個人情報は載せない ・事故が起こったら謝る こんな感じにすればいいってことですか?
・Winnyは使わない
事故が起こったら適切な対応をする、だろ。
FileHandleからここまでの脱線がウケる みんなバカなのか?わざとだろ?
自鯖スレだと思って呼んでたらPerlスレだった・・・
まあ過疎スレだから、枯れ木も山の賑いて事で
何この流れw 中級者向けの本を教えてくだしあ。基礎やcpan巡りはできるようになったけど、その先、みたいな。
lestrrat さんの本とか薦める予定調和ですか
サーバーAとサーバーB間でデータを投げたり、レスポンスを返して貰ったりするようなものを作るとき 皆さんだったらどんなのを使います? 自分は今、SOAPとかってどうなんだろう?と思ってるしだいです。 最悪返すデータが格納されてるURLを投げる方向だったりしますがw
>>648 ジョブキューとか API とかについて調べてみればいいと思う。
>>648 勝手にやっていいなら、RESTでもJSONPでも。
納品時にはstrictもwarningsも外すよ
653 :
nobodyさん :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->(); } # 前者が上手くいき、後者が上手くいかない理由と、 # 後者の代替となる方法を教えて頂けないでしょうか?
> 納品時にはstrictもwarningsも外すよ そして馬鹿 perler と呼ばれるわけですね。
>>653 my $hoge2 = *{"${class}::sub1"};
理由はエラーメッセージ読め。
出社前に my $hoge2 = *{"$class\::sub1"};
657 :
nobodyさん :2009/01/21(水) 10:38:00 ID:dhsSLEKy
utf8の文字が半角か全角かを判別するにはどのようにしたらよいのでしょうか?
あんぱっく すりゃわかるさ
>>657 正規表現なら、\p{ASCII}でマッチさせるとか。
ActivePerlで起動中のアプリケーションを終了させる事はできますか?
661 :
660 :2009/01/21(水) 17:03:30 ID:???
やりたい事は起動中のアプリケーションの設定ファイルを 書き換えて、そのアプリを再起動させたいのです。
Windows であれば、Win32API を扱えるモジュールがあるので、SendMessage を指定アプリケーションに投げる方法が取れるかと思います。
663 :
660 :2009/01/21(水) 17:48:12 ID:???
検索結果から簡単に見つかると思ったら甘かった…。
>>662 検索キーワードありがとうございます。
勉強の為にメールフォームを書いてみました。 掲示板に改造しようと思っているのですが、 さすがに素のまま設置するのはスパム投稿で酷い目に会いそうな気がします。 スパム投稿対策にはどういうのを施せばいいのか良くわかりません。 モダンなスパム対策にはどういうのがあるのでしょうか? 良ければ参考になるようなものをご教示お願いします。
画像認証 ssl
モダンなんて言ってる時点でアホだろ
ぐぐれ
ぐぐれ(笑)
発売前の本ですよw
perlでモダン焼きを作れますか?
モダンモダン言いすぎてカスタマーサポートに飛ばされるやつとかいるから気をつけろよ
おれはこのスレで一番モボだと言われた男
、 ヽ |ヽ ト、 ト、 ト、 、.`、 /|l. l. | |l l | | l |l.| |l. l /' j/ ノ|ル'/レ〃j/l | -‐7" ヾー---┐|_.j  ̄ ./゙ニ,ニF、'' l _ヽ :: ,.,. |ヽ 」9L.` K }.| l' """ l ) / h、,.ヘ. レ'/ レ′ r.二二.) / ≡≡ ,イ . / ! \ / ├、 ::::::` ̄´ / !ハ.
画像を取得→加工→表示させるプログラムを作ろうと思っています。 ググってみたんですが、ローカルの画像を加工して保存する方法ばかりで、 他のウェブサイトから画像を取得→加工→表示する方法がわかりません。 参考になるサイトでもいいので、どなたか教えてもらえませんか?
(1)他のウェブサイトから画像を取得 (2)加工→表示
要はHTMLがレンダリングされたページを画像として取得したいってことでおk?
>>677 いえ、例えば、
h
ttp:// 〜.jpg、500*500
の画像を取得し、250*250にして表示したいと思っています。
LWPとImagemagickでぐぐれ
取得する方法と加工する方法と表示する方法がそれぞれわかれば組み合わせるだけだよ。 どれがわからんの?
取得はLWPのget()でいいと思うんですけど・・・ 加工と、表示の仕方がわかりません。
getした画像はどこにあるんだよ馬鹿っ!!
たしかこのスレでも似たの無かったっけ? LWP で取得したイメージが内部でイメージに変換できなくて困ってるってやつで自分が回答した記憶がある BlobToImage でググってみれば、取得から表示までのサンプルが出てくると思う
まずは加工か。 GDもしくはImageMagickあたりかな
>>683 このスレのリンクがいっぱい出てきたくらいで、参考になりそうなところはありませんでした・・・
なに、宿題?それとも仕事?
いえ、趣味です。 携帯用の2chビューア作ってて、画像リンクをサムネイル表示するオプションをつけたいと思いまして。 htmlのimgタグのサイズ変更だとうまくいかないんで・・・
みなさんありがとうございました! サンプルを見つけてちゃんと動いたので、これを改造して使いたいと思います。
xhtml1.1のページをAtomフィードにして出力したいのですけども、 どういったモジュールを使うのがお薦めでしょうか?
XML::RPC XML::Parser XML::Atom XML::Feed etc
694 :
sage :2009/01/29(木) 22:24:25 ID:kdy/+vR+
複数のプログラムを一度に起動したいのですが execを使えばいいのか、systemを使えばいいのかすらわかりません。 exec("notepad"); system ('start "" "C:\WINDOWS\system32\notepad.exe"'); 一つのプログラムであれば上記のような方法で可能なのですが。 どなたかご教授願います。
systemを3つ並べれば3つ起動しね?
696 :
694 :2009/01/29(木) 22:41:07 ID:???
system("notepad"); system("notepad"); system("notepad"); こうすると1つ目の終了まで待機するようなのですが、 待機しないで3つ起動するにはどうすればいいでしょうか。
旧式な人間だから、fork & exec使うかな。 モダンな方法はあるのだろうか。
>>696 自分で
>>694 に書いてるけど
system("start", "notepad"); #これを3つ起動でしょ
699 :
694 :2009/01/30(金) 00:09:29 ID:???
>>698 上手くいきました!
試行方法が未熟でした…。
ありがとうございました。
モダン(笑)
701 :
nobodyさん :2009/01/30(金) 02:30:39 ID:??? BE:636768689-PLT(54324)
for (0..2) { system(1, "notepad"); }
モダン(笑)
本気でnotepadかよ! たとえで出してたのかと思った。
ところで、「モダン(笑)」って何かの流行?
いや全然
聴きなれない言葉を聴いてちょっとハイになってるだけでしょう 小学生によくあるようなアレ
モダンモダン言いすぎてカスタマーサポートに飛ばされるやつとかいるから気をつけろよ
モダン(笑)
モダン(笑)
ぼくの方がモダンだからぼくの方が偉い
モダン(笑)
パッケージ名に変数は使えますか? package $name とか
パッケージが変数とかwww
>>712 単刀直入すぎ。
それは出来ないけど、Sub::InstallとかClass::MOPとか、その辺使ってみるとか。
標準的なクラス型のオブジェクト指向では使わないから、そこは考えて使ってね。
715 :
nobodyさん :2009/01/31(土) 20:50:36 ID:IExMyMgz
プログラムが美味く動かないのですがどうやら原因はサブルーチンが作動していないようです。 以下はプログラムの一部。 #サブルーチンの呼び出し &aaa(); exit(0); # サブルーチンの宣言と定義 sub aaa{ print "あいうえお"; }
エラー内容をよく読むべし!
717 :
nobodyさん :2009/01/31(土) 20:58:57 ID:IExMyMgz
直接サーバーで動かしているのでエラーは戻ってきません。
>>717 まあ、まずは落ち着いて、君のPCにPerlを入れないか。
・どういう風に直接サーバで動かしているのか ・どういう風にサブルーチンが作動していないことを確認したのか まさかこのプログラムをa.cgiとかにしてCGIで実行しているんじゃないよな・・・?
っとここはWebProg板だからその可能性が高そうだ
721 :
nobodyさん :2009/01/31(土) 21:25:24 ID:IExMyMgz
>>721 初心者っぽいから言っておくが
サブルーチンの動作を省略せずにきちんと書いてみ
そしたらそのプログラムに何が足りないかすぐわかるはずだ。
初心者こそ初めは省略せずに丁寧にプログラムを書くべきだと思うんだが 今時の人はそういう事をしないのカネ
考えられるのは - #!/usr/bin/perl のようなperlのパスを書いてない - 実行権限がない - web?? なら print "Content-type:text/html \n\n"; 的な記述がない とかとか
モダン(笑)
つかfatalsToBrowswerでいんじゃね
単純にルーチンから引き渡せてないだけだろwww
729 :
nobodyさん :2009/02/01(日) 02:37:45 ID:8RIm5Wux
>>730 日本では流行らないだろw
世界的にはすでに流行ってる
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はどれが必要なのでしょうか?
まだサンプルプログラムが動かない状態です。よろしくお願いします。
733 :
732 :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だけ入れればいいんでしょうか。。。
734 :
732 :2009/02/01(日) 05:44:24 ID:???
735 :
nobodyさん :2009/02/02(月) 10:41:30 ID:WfkTEh9p
すみませんvistaにmod_perlを導入したいのですが ソースコードしか手に入らず困り果ててます コンパイル済みのmod_perlはどこで入手できますでしょうか?
ggrks
ググればすぐわかる内容をわざわざ掲示板で聞くとか頭悪過ぎ
> ググればすぐわかる内容をわざわざ掲示板で聞くとか頭悪過ぎ ググって正しい内容に到達できるといいけどね。 古かったり、間違った情報だったりすることって多々あるよね。 ブログ書いてると分かると思うけど、pod とか他人からのコピペだったり、 試行錯誤してることを載せること多いよね。 その分野に疎かったら、古かったり、間違った情報だとしてもわかんないよね。 だから、知ってる人に質問したほうがいいと思うんだ。
742 :
nobodyさん :2009/02/02(月) 14:33:05 ID:qwoAnWRh
print "content-type:text/html\n\n";の\nはなぜ2つ書かないとcgiとして動作しないのでしょうか?
HTTP ヘッダが空行をヘッダとデータの区切りとして定義されてるから
そういう意味があったんですね \nがひとつだと500エラーになったのはそういうこだったんですね ありがとうございました
745 :
nobodyさん :2009/02/02(月) 16:35:52 ID:P7XLmGHa
何らかの原因でbuf1という変数が空になってしまうのですが $buf1 = "$a[0]","&","$a[1]"; ↑とりあえずこの表記は正しいでしょうか?
$buf1 = $a[0] . "&" . $a[1];
ありがとう^^
$buf1 = join("&", @a); とかじゃないかもしかして
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" と なってしまうのでしょうか?
>>749 Lingua::JA::"k"ana は書き込み時のミスか?
print encode("shiftjis", romaji2hiragana("aka")); で Win コンソールででけたよ
>>751 my @a = split(/&/, $xxx); したものなら
>>748 で結合できる。
小出しにせずに、周辺のコードも晒すといいよ。
変数の様子が意味不明の時は、手当たり次第 Data::Dumper に食わせてみるといいよ。
use Data::Dumper;
warn Dumper($str);
warn Dumper(\@array);
warn Dumper(\%hash);
普通に my @a = qw( a1 a2 ); my $buf1 = $a[0] . '&' . $a[1]; print "\nbuf1 = $buf1\n"; でできないか?
>>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]";
ちなみにこれです。これが動きません
>>755 { に対応する } がないし、変数とおぼしきところに $ とかがないので、
今のままだと動かないと思う。
use strict; をスクリプトの一番最初に書くと、文法チェックしてくれるよ。
どんな理由があろうとも use strict; をつけるのは perl の基本だから、
その上でがんばってほしいです。
出てきそうな質問に答えておくと、"" で囲まれた中に @ を含めたいときは
\@ にするか、"" をやめて '' でくくったりする。
ありがとう御座いますがんばります。
758 :
749 :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 わざわざ試していただいてありがとうございます。
そうすれば文字コードの指定も同時にできるんですね。
そちらを使わせていただくことにします。どうもありがとうございました。
>>758 > 典型的なケアレスミスでお恥ずかしいかぎりです。
あんまり謙遜すると、キチガイにつけ込まれるよ。
sub a{ &a sub b{ } } このサブルーチンの使い方は間違っていますか?
Markdownのような記法からS5のようなスライドのHTMLを生成するモジュールをご存じであれば教えていただきたいです。
$a[1..9] = $b[1..9]; この記述はあってますか? いったいどこが悪くて動かないのかわからないので総当り中。
>>764 まあ、まずは落ち着いて、君のPCにPerlを入れないか。
>>766 インデックスの0だけを据え置いて配列の内容を交換したいのですorz
@a = @b; だと @a[0..9] = @b[0..9]; になる気がする。 @a[1..9] = @b[1..9]; か。脳内だけど。
@a = @b; shift(@a); unshift(@a, $b[0]);
useするだけで色んなサブルーチンが使えるようになるモジュールって、全部use base "Exporter"してour @EXPORTにサブルーチン名代入する作りになってるんですか?
Perlのスライスは分かりづらいよな。何で@にしたんだろ。
a[0..9]が表すものはリストだから a[0]ならスカラーだから$なのと一緒
$ @ % & などは、変数とかを表すものでなく、
実は一貫してアクセスの種類示すものとして使われている。
$aaa; #「スカラー変数aaa」ではなくて「スカラー名aaaへのアクセス」
>>770 オブジェクトじゃなければ、だいたいそう。
ひねくれ作者だったら知らん。
検索どころか、ちょっと試せば分かることをなぜ試さないのか。
質問者は
>>1 を熟読した上で、質問してほしい。
>>774 そんな風に煽るから、やる気なくすんじゃないの。
>>774 答えたい人が答えればいいだけだから、
スルーしろよ。
いやしくも「教えてクン」たるもの、努力をしてはならない。 過去ログを読んだり、検索してはいけない。 「英語は苦手なので、分かりません。」は、高く評価できる。 辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。 他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。 また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。 「サッパリ」という単語が「やる気の無さ」を効果的に表現している。 「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
>>773 それ本読んだ事ある人なら知ってる内容だよね
@a = shift(@a) ; unshift (@a , 1) ; この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?
perlは実は無料です。ソースも公開されています。
オープンソースだからねぇ
>>780 > この記述はあってますか?、それと日本語使えてウインドウズに入るPerlって売ってますか?
use strict;
use warnings;
の 2 行を、perl スクリプト全部の先頭に付けると、
記述があってるかどうかおしえてもらえるよ。
Windows に入る perl は、ActivePerl というのと Strawberry Perl の
2 つがあるよ。
Windowsで使用している人のほとんどがActivePerlだと思う
windowsで鯖公開してる人が多いのか?
Windowsで開発しても、運用まではやらないんじゃないか。
開発は本番の環境に似せた環境で作るから Winで使わないならWinで開発しないだろ、jk
開発、運用にwindowsを選ぶ理由がわからん
昔からWin鯖で動いてたシステムなら改修で弄った事あるけど 弄った後にWin鯖は入れ替えでRHELに入れ替わってたな
今はvmwareとかcolinuxがあるからなあ。
実機用意しなくて済むようになったのは良い事
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');
}
ミスはないでしょうか?
>>793 >ミスはないでしょうか?
動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
@a = @b shift(@a) ; unshift (@a , 1) ; この表記でバグってるような気がします ちなみにjperl日本語版をベクターでダウンロードしましたがインストーラーが見当たりません。 ウインドウズで開発環境を作るにはどうしたらよいのでしょうか?
a とか b だけの変数名は使うなバカチン unshift(@a , 1); 第二引数は配列でアレ!
ぜろちゃんねるスクリプト use strict; すらしてねぇ
strict.pmが鯖に必ずしも入っていなかったからだと思うよ
弄られるってのも考えてると思う
>>801 > strict.pmが鯖に必ずしも入っていなかったからだと思うよ
そういう鯖って今もあるの?
あるとして使う積極的な理由は見つからない。
use strict; しないスクリプトは消えるべきかと。
世の中そう簡単じゃないんだよ
作る時は -Tオプション use strict; use warnings; つけるけど、納品するときは外すよ
>>806 納品前に外す趣旨の発言は、この板で何度か出てきてるね。
外すと書くだけで、合理的な理由を示さない人だから、構わない方が良いよ。
>>808 Perl で飯食うの辞めるといいと思う。
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');
}
ミスはないでしょうか?
> ミスはないでしょうか? お母さんのおっぱい揉みながら聞いてみるといいよ
移動したんじゃないのかよw
移動先で放置食らってるんだろw
ソース見たけど嫌になった
>>810 >ミスはないでしょうか?
動作するか自分で試す事もできないの?
馬鹿なの?死ぬの?
技術者としては死んでいるね。そもそも技術者ではないか。
>>808 > 可能性がゼロじゃないわけで。
これについて、何の可能性なのかよくわかんないんだよね。
>>801 でいう「strict.pmが鯖に必ずしも入っていな」い可能性がゼロなのか、
use strict; use warnings; したときに出てしまうメッセージを潰しきれない
のがゼロなのか。
> ログはきまくるっていうのもあるのかな
そもそも何のログが出てくるのかと。
use strict; use warnings; しているときに何か出てくるのであれば、
それは必ず潰さなければらなない。
そんなものが出てくる時点で何かおかしいことをしている。
例外的に、わかってておかしいことをしたい場合は、その箇所に関しては、
個別的に黙らせればよい。
use ***;書いてたらそれだけで処理に時間がかかるからじゃね?
use strict; 外す派って、テストの時 use strict; つけてテストした後に、 外してもう一回テストやるの?面倒くさくない?
> use ***;書いてたらそれだけで処理に時間がかかるからじゃね? どのくらいの時間がかかるの? ベンチとか取ってるのなら見てみたい。
>>821 use strict; 外す派は、テストの概念が存在しない世界の人たちである気がする。
おれが
>>594 で聞いたときも答えてくれなかったから教えてくれないでしょ
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
# --- 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;
use strictしない(最終的に消す)派とか言ってるやつがuse CGIとかやってたりするんだろうな
何と戦ってるんだ
どこで誰が戦ってるの?
人は色々なところで戦ってるんだ
上條恒彦の歌思い出した
コンパイルが簡単にできればすべては解決なんだろうな。
strict使わない馬鹿なんかに構うことないだろお前ら
燕雀安んぞ鴻鵠の志を知らんや
>>825 計測したことがないけど、warning.pmは重くてstrict.pmはほとんど負荷がない、とドキュメントに書いてあったと思う。
だから俺はuse strictして、-wオプション付きでテストさせている。
warningsと-Tオプションは納品時に外すがstrictは外さないでしょ
負荷以前にstrictがないプログラムは怪しいぞw。不信すぎる。
warnings も strict も -W も外さない 外して焦ってサポートに電話してくりゃ、そりゃ商機なんですよw 下手に改造されてワーニング放置で動かされて、とある日にぼろぼろのソースを直せと言われるより、 早期にワーニング出てもらって、修正依頼に対して「そちらが勝手に改造したので新規料金相当頂きます」のほうがいいんですよ ちったぁ考えろって
このスレの統一的見解は、 「納品時には use strict; use warnings; を外す」 でよろしいな?
なんでだよw
モダンなPerlerは外さない
>>838 商品でどうこう言ってるくせに-Tオプションを使ってないのは胡散臭い
-T つかうとどんなことが出来るのか、初心者のおれに教えてくれ。
>>838 相手が勝手に改造するのと、strictとwarningsは関係なくね?
他社に納品ってしたことないから分からんかった
>>842 -T は使ったことないから知らないから、-T でどんな機能が働くのか教えてくれ
ググった
自分のスクリプトを -wT で動くようにしてみよう
ありがと
>>843
>>847 良く書けていたサイトがあれば教えて欲しい。
PerlでWebプログラミングしてて-Tの汚染チェック知らないとかヤバいだろw
>>847 つ 確認用オプションは-wTcがオススメ
$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にしようが、登録フォームはどのみち消えてしまいました。 この場合、どうしたらよいのでしょう?;
854 :
853 :2009/02/06(金) 16:30:28 ID:???
<input type=radio name=bosyu value=1>表示しない 正しくは、 <input type=radio name=bosyu value=0>表示しない でした。申し訳ありませんが、ご教示願いますm(_ _)m
要するに、$bosyuに1がセットされないってことでおじゃるか URLデコード的なものをしてないんじゃ?
$bosyuじゃなくて$FORM{bosyu}でやってみれ
$bosyu == 1 ってやりたいなら明示的に int(入力値) ってやったほうがいい でなけりゃ 0 or 1 じゃなくて TRUE or FALSE にして、eq を使うとか
>>857 さん
ありがとうございます。
やってみましたが、やはり0,1に関わらず登録フォームが消えてしまいました;
>>858 さん。
ありがとうございます。
今からやってみたいと思います。
>>858 さんの方法で試してみましたが、やはりできませんでした。
ご迷惑おかけしてしまい申し訳ないです;
これまたひどいスクリプト
>>862 そんなこと無いだろうさすがに
と思ったけど、これは酷いw
$bosyu 自体読み込みしてないけりゃ、$bosyu じゃなくて bosyu とかなってる始末
ログにはコメントしか出力してないし、CGI 君はどうやって表示するしないのフラグを知ればいいの?
もっと流れを知ったほうがいい。
あと、このスクリプトは酷いので別のを使ったほうがいい
コレは酷い 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
865 :
853 :2009/02/06(金) 19:19:01 ID:???
そんなに酷かったのですか・・・ 私自身で追加した行は酷いと言われても仕方が無いと思っていましたが、 スクリプト自体が酷い となるとびっくりです。 ただ、今の私にピッタリのPerlスクリプトなので、どうしてもこれを使いたいのですが・・・ 今まで色々と検索かけてみたり、ソースを変更してみたりしたのですが、 やはり私一人の力ではどうしようもできません・・・ もしよろしければ皆さんの「ここをこうすればいい」などの意見を参考にしたいです。 厚かましい願いではありますが、どうかご教示して頂けませんか?;
866 :
nobodyさん :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) { 登録フォーム表示コード } で、いけるんじゃね?
>>866 さん
ありがとうございます。
CGI.pmは先ほど試したのですが、使うとCGI自体の動作がおかしくなってしまうので
使えませんでした。
サーバーはWinXPのApache2で、Perl5を使用しています。
>>868 さん
はい、自宅サーバーで運用しています。
870 :
nobodyさん :2009/02/06(金) 21:08:43 ID:LbIRe9/S
どんな風におかしきなる? CGI.pmでおかしくなるとは考えにくいけど。 use CGI は2行目あたりにきちんとかいてる?
>>870 さん
はい、
use CGI; を2行目に挿入した時点では正常に動作していますが、
3行目以降で
my $q = new CGI;
my $is_visible = $q->param('bosyu');
を挿入しますと、サブルーチンで作った画面へアクセスすることが出来なくなってしまいます。
>>856 のスクリプトですと、管理画面等に入ることが出来なくなります。
その際、エラー文を吐き出すことは無く、画面が変わらずトップページのまま といった感じです。
872 :
nobodyさん :2009/02/06(金) 21:37:53 ID:LbIRe9/S
なるほど。 それなら &decodeの下にその2行をいれてみて。 それでだめなら、decodeファンクションをかきかえないといけないかな。
>>852 WTCって/bin/ladenのせいで無くなっちゃったんじゃなかった?w
use Carp; してるモジュールを継承してもcroakが使えないのは何故? 親が使える関数は全て子供も使えるのでは?
質問です。 既存の配布スクリプトをちょっくら改造しようと思ったのですが、 フォームの内容が空の時のみ処理をするといった部分 if( hogehoge eq "" ) { #処理 } これに加えてフォームの内容が特定の内容の場合も処理をするべく if( hogehoge eq "" || hogehoge eq = "関東") { #処理 } このようにやったのですがフォームの内容が関東でも処理してくれません。 日本語がまずいのでしょうか? どうか解決策をご教授くださいませ。
>>875 =はいらないんじゃ?
それより、それでエラーでないのか?
eq = はtypoだよな? だとしたら、hogehogeの内容をprintしてみては?
hogehogeって、hogehogeなのか。
879 :
nobodyさん :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. とでるのですが、どうやってやればよいのか非常に困っています。 どなたか何卒よろしくおねがいいいたします。
880 :
875 :2009/02/07(土) 03:07:36 ID:???
すみません、=はタイポです。 自己解決しようとバグフィックスして、 結果文字コードが不全だったようで 変数の文字コードを変換したら無事に動きました。 お騒がせすみませんでした。
>>879 B/C.pmは5.10から標準で無くなった。
B/C.pmを入れるか、5.8系にするかしろ。
…でも正直それだけの価値は無いよ。
コンバートが上手く行くのは、すげえ初歩のスクリプトのみ。
>>873 オプションを繋げて書くって知らないんですね、わかります。
これは酷い、ネタだと思うけど
>>873 Perlのオプション知らないの??
>>852 の書いてあるのはバラしたら
-w
-T
-c
各々のオプションを一々チェックするのは時間のムダ
上のオプションを繋げて書くと
-wTc(順番は書く人によって変わる、例えば-cwTや-Tcwなんかでもおk)
必要なオプションをつけてテストするのは当然の事だが
-Tオプション知らなかったり、オプションを繋げて書くのを知らなかったり(オプションだと気付いてない?)
少しは勉強してからPerlやれよ
>>883 ここにいるのはラクダ本どころか入門書すら読んだ事無い香具師がいっぱい
いちいち驚かない方が良い
初心者スレでいちいち知識を自慢するなよせせこましい
>>874 継承したいならuse baseか@ISAを使うこと。
>>883 ってか、ネタで書いてるんだろうからそんなに怖い顔してレスするなよ
>>883 /bin/ladin にもつっこんでやれよ。
/bin/laden だった orz
こんな風に秒数から適切な時刻の形式に変換したいです。 45 -> 45 130 -> 2:10 3601 -> 1:00:01 どうしたらいいでしょうか? DateTime->new(second => 4032)とかしたらyearとかも入れろって怒られました。
-c は syntax チェックだけで実行しながらのデバッグはできねーぜ?
>>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__
894 :
nobodyさん :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ファイルができました。 どこに問題があるのでしょうか?何卒よろしくお願いします。
もとの pl さらせよバカチン
バカチンって関東ではふつうにいうの? 俺は「あたしんち」で初めて知ったから バカチンって聞くと「あたしんち」のお母さんが 口から火を吐いてる絵が思い浮かぶ
俺はローマ教皇の姿が思い浮かぶ
>>893 やはり関数自作ですか。ありがとうございました。
899 :
nobodyさん :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网ヘ、」 どのようにしたら、うまく変換できるでしょうか。
900 :
899 :2009/02/07(土) 19:59:02 ID:???
↑すいません、1行目を消してしまいました。 「ム板の質問スレってなくなったんでしょうか?」と書くつもりでした。
jcode じゃなくて Encode を使いましょう。
敢えて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; でどうよ
904 :
899 :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するのはどうすればいいんでしょうか。
Encode tr でぐぐってみたらいいと思います。
>>904 もう、Unicode::Japanese使っちゃえよ。(遅いけど・・)
>>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';
>>907 ドキュメントの読みの浅さが露呈して申し訳ないです。
ありがとうございました。
が、
>>891 をやるには、単純に
DateTime->from_epoch(epoch => 3601)
でいけると思ったのですが、
> my $duration_dt = DateTime->from_epoch( epoch => $now + $duration - $now );
はどんな意味があるのですか?
909 :
nobodyさん :2009/02/08(日) 18:14:28 ID:bk/uRgIM
デバックってどうやるのですか?教えてください。
deback?
N88だとRUNしたときにエラーの行が表示されるでしょう? あれですあれ。perlはどうやってやるのですか?
Perlでもエラー行出るだろう
kcatch つかうといいよw
プロバイダとかの無料webスペースだと、色々成約があってエラーの内容を知るのって難しそう
if () {} elsif() {} else {} って、どう改行してますか?人によって色々あると思うので参考にさせてください。 自分はこう書いてます。 if () { } elsif () { } else { }
>>917 パッケージについてきたモジュールのソース見れ
>>908 あ。ごめん$nowいらないな
最初違うやり方で作った後に「差を出せばいっか」ってことに気づいてやったんだけど、
epoch => $duration
だけあればいいね
>>917 If () {
}
elsif () {
}
else {
}
制御文の頭が常に一列目に来るようにこんな感じで。
()の両側には1スペースを入れる。
if () { } elsif () { } else { } おれはこんな感じ スタートとエンドが同じタブ位置って考えると、これが自然かなと自分では思ってる。
いいじゃないか、こうだって。 if() { } elsif() { } else { }
>>917 俺はこう。
if () { }
elsif () { }
else { }
嫌なんだよ、改行が。cssとかもいつもこう書いてる。
以下奇怪なif-elsif-else大会
そして終了
>>925 $aaa; $bbb; $ccc
と一行にするよ。
続きは lislog.livedoor.com とかでやれよ
>>669 読んでないが激しく糞だった
ここの住人には全く必要ない
>>935 まず自分の鼻にべったりついている糞を洗い落とせ。
電波お花畑板でやってくれ。
938 :
nobodyさん :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) みたいなのが希望です
for (1..5){}でできるよ
940 :
nobodyさん :2009/02/11(水) 01:35:21 ID:DSvC+HT2
>>939 レスありがとうございます。
今回は配列の添字で$iを使いたいのです。説明足らずですいません。
# かといって$[を書き換えるような事はしたくないのでw
ブロックの中では$_が使えるんだが
for my $i (0 .. 5) {} でできるよ
for my $i (0 .. 4) {} だべ
$numの値が分からないから無理やん
これでええやん。 for(0 .. 4){ my $i = $_; ・・・・ }
しっくり来ないというのがよく分からない。 my $num = 5; my $n = $num-1; for my $i (0 .. $n) {}
値の数値じゃなくて、配列が何個目かとりたいんじゃないかな。
おまえ親切だな それは違うと思うけど
結構こんなことをやる my @foo; foreach my $num (0 .. $#foo) { ... } それか、grep、mapとか・・・
map は配列を返すときに有用であって、ただのループに使うべきじゃないと思うがw
map 期というものが perler にはあってだな。。。
952 :
nobodyさん :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が引数を取得して処理をする。
上記処理を自動で行いたいのですが。
どなたかお解かりになる方、ご教示お願い致します。
その通りに書けばいいだけだと思うのだが...
>>952 うpロダの違法ファイルとかの処理なのかと思ったけど、
エロ画像を検出するモジュールなんて流石にないかw
何処が分からないのか具体的に書かないとレス付かないよ。
おそらくは
あぷうろだを運営しています
ファイルがアップされたときにファイルの中身をプログラムでチェックしており、
あやしいファイルがアップされたときに外部のURLへ通知を行いたいのですが
どのようにやればいいのか分かりません
なのかな?
だとすれば
>>953 にある
use LWP::Simple;
$content = get($URL);
で解決します
>>957 単にリダイレクトするだけでよい可能性もあるなw
>>957 >あやしいファイルがアップされたときに
どう考えても、ここが一番頭を使いそうなものだが
文字列の中の複数の文字を入れ替える事を目的としています $test = '文字列の中の複数の文字を入れ替える事を目的としています'; $test =~ s/文字列/Peal/g; $test =~ s/目的/CGI/g; としても駄目でした。 複数の文字列を入れ替える方法をご存知でしたらご教授願います。
駄目と言うと?
>>961 作業していた文字の中に表現文字が入っていたみたいで正常に作動してなかったみたいです。
実際に使っているコードを見せないと駄目ですよね。以後気をつけます。
ご返答ありがとうございました。
quotemeta でもやっとけ
なぞの「表現文字」について
clamavに通していたりします♪@うpファイル
(´-`).。oO(昨夜のRock54不具合と同じ事かぁ。。。)
トリップ付けるやつにろくなやついないなw
Imagerでjpeg読めないんだけど
まずは、これ動かしてみれ。 これに含まれてないフォーマットは読めない。 use Imager; my @types = Imager->read_types; print "@types\n";
ppm.tcool.orgから持ってきた0.67使ってるんだけど、それやると sgi bmp ico pnm tga raw ってなるんだよね。前はjpegも使えたと思うんだけど。アップデートしたときかな
>>970 煽り口調でブログのエントリ書くと、低姿勢で速効対応するよ
朝鮮人かよw
>>970 試しにbribesのリポジトリから落としてみたら、これはjpeg対応してるっぽい。
974 :
nobodyさん :2009/02/14(土) 22:41:05 ID:oywl4yOv
スレッド掲示板のスレッドを削除するスクリプトを書いていてふと思ったのですが そのスレッドの内容が書かれているファイルとディレクトリを削除するため unlinkとrmdirを使う時、flockのようなことをしなくても問題ないのでしょうか。 一応、ファイルに関しては開いてflockでロックをかけた後、unlinkをしてみたのですが Permission deniedと表示されてしまい削除されませんでした。 仮に必要な場合はflockではなく、ファイルやディレクトリを作成しその間は読み込めないように するしかないのでしょうか。
>>974 よく考えるんだ。
ファイルロックは、変更が競合しないために行うものだという点を思い出せ。
976 :
nobodyさん :2009/02/15(日) 00:36:02 ID:Bli/G9UX
感覚的に使っている部分があったのでflockについて詳しく調べてきました。 flockはファイルの読み書きに対応するのであってしかもflockは 仮にロックがかかっていてもflockを宣言したファイルでなければ 読み込めるみたいですしunlinkとrmdir意味がなさそうですね。 となると使わなくてもいいかファイルやディレクトリを利用してのロックですね。 調べてもそれらしき内容のものは出てきませんし大丈夫な気もしますがどうなんでしょうか。。
>>976 結論だけ言うと、何も考えずに削除してかまわないんじゃないかな。
噛み砕いて解説しようと思ったけど、予備知識が足りてない模様なので、更なる精進を期待する。
978 :
nobodyさん :2009/02/15(日) 02:46:56 ID:Bli/G9UX
>>977 そうですか。perl以外の他の知識が必要みたいですね。
システムコールあたり?ちなみに'perl unlink'ではなく
'unlink'で調べたらC言語のunlinkの解説が出てきて見てみたのですがopenされてると
削除されないように出来てるみたいですね。削除中にopenされたら?
とも思いましたがファイルの削除が開始された時点でアクセス不可になる。
というように今のところ解釈しています。
あくまで予想なのでこれからももっと励んでいつか理解できるように
なりたいと思います。ありがとうございました。
というかどうせ消すならアクセスされても問題ないんじゃ flockって同時にopenした時に 片方がもう片方に上書きされるのを防ぐためのもんでしょ
ひょっとしてキミはだいぶ自分の事しか考えない人だなw
>>978 unlinkしとけばOSの側がいいように取り計らってくれるから、
こっちがどんな順番でどう処理するか考える必要ないと思うけど。
どうせ消すんだから、書き込まれてから消しても 消した後に書き込み失敗しても関係ないじゃん。
消す順番はインデックス→データの順番な
Unixなら、ファイルが開いた状態であれば、closeするまで内容が保障され、 close後にunlinkが実行される。 一方Windowsはunlinkに失敗した。
ファイルロック自体はWindowsの方が優れてるけどな。WindowsのPerlの実装は知らないが。
Unixの多くの実装は勧告ロックで、Windowsは強制ロックだからね。
>>984 は、一方ロシアは……のネタだから、あまり突っ込m
そもそも書き込まれる可能性のあるファイルを削除するってどうなの
どうもしないよ
ま、RDBMSを使う方が楽だな。
数万件で抽出したデータからまた別のデータを導かせない限り、 数万程度までだったら txt ベースの方が全然扱いやすい
993 :
nobodyさん :2009/02/16(月) 16:49:56 ID:mVH+JlHn
なんか新スレに書き込むのは気が引ける・・・ $title = "*********<title>ホームページ</title>*******"; という変数から「ホームページ」を抜き取るのになにか良い方法はないでしょうか? 現在<title>と</title>でsplitをして取得していますが、パターンマッチを用いて 上手く出来ないでしょうか? どなたか宜しくお願い致します。
>>991 「なるほど」と言って数万個のデータを数万個のファイルに書き落とす初心者が出現
>>993 my ($res) = $title =~ m!<title>(.*?)</title>!;
my ($res) = $title =~ m!<title>(.*?)</title>!is; にした方がいいと思う 理由 (1) 必ずしも title となってない。 TITLE ってやってるところもある (2) 変数に入ってるデータに改行が入ってれば s はあった方がいい
997 :
nobodyさん :2009/02/16(月) 19:41:13 ID:mVH+JlHn
>995 >996 お二方有難う御座います。 パターンマッチ結果を変数に入れられるんですね。勉強になりました。
my ($res) ↑このカッコの意味が分からないorz my $res = $title; $res =~ m!<title>(.*?)</title>!is; ↑動作は同じはずだけど、こうやってました
カッコは正直意味無いだろ。 後半は全然違うと思うが。
カッコなしだと、$titleには1がはいっておしまいのような気がする 次スレで教えて欲しい
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。