Perlについての質問箱 18箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/07/20(水) 05:15:36"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2005/03/17現在の最新版: 5.8.7
● 2005/03/17現在の開発版: 5.9.2
0002デフォルトの名無しさん
2005/07/20(水) 05:23:091 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
0003デフォルトの名無しさん
2005/07/20(水) 05:24:2411 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
0004デフォルトの名無しさん
2005/07/20(水) 05:30:09Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873110378/
[オンラインマニュアル]
Perldoc.com: http://www.perldoc.com/
perldoc.jp: http://www.perldoc.jp/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
0005デフォルトの名無しさん
2005/07/20(水) 05:35:48ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0006デフォルトの名無しさん
2005/07/20(水) 07:14:07[プログラミング自体の経験が無い奴はまずココを読め] (移転)
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
日本語ドキュメント検索: http://search.cpan.jp/
0007デフォルトの名無しさん
2005/07/20(水) 19:40:030008デフォルトの名無しさん
2005/07/20(水) 23:51:45あと10年もすれば流行りの言語を尻目に枯れ果てて/binにまで落ち、
ニッポンの勘定系のバッチでも使えるようになっているだろうさ。
0009デフォルトの名無しさん
2005/07/21(木) 00:37:10これにインクリメントして$a="\x83\x41"にしたいのですができません。
どうすればいいのでしょうか?
ちなみに
$x="\x83";$y="\x40";$a=$x.$y;
はうまくいきますが
$x="\x83";$y="\x";$z="40";$a=$x.$y.$z;
はだめです。シングルクオーテーションや.を+にしたりしましたがだめでした。
0010デフォルトの名無しさん
2005/07/21(木) 00:41:47$test = <FH>;
@test = <FH>;
close(FH);
$test=<FH>は最初の一行だけ読み込み、@test = <FH>は全行読み込むと知ったのですが、
"sample.txt"が同じ文字列が10万行であると仮定して、$test = <FH>とtest =<FH>の負荷は10万倍になるのでしょうか?
0011デフォルトの名無しさん
2005/07/21(木) 00:42:38(1)
unpack/pack または ord/chr
(2)
unpack/pack または ord/chr&hex
0012デフォルトの名無しさん
2005/07/21(木) 00:43:51「負荷」が何を指すのか不明だが、
メモリ消費はは10万倍になるな。当然だが。
0013デフォルトの名無しさん
2005/07/21(木) 01:02:25ヒントありがとうございます。
0014デフォルトの名無しさん
2005/07/21(木) 01:26:26ありがとうございます。
趣味のプログラムなのでよい言葉が浮かばなかったのであやふやな表現になりました。
CPU使用率の意味で使ったつもりです。
0015デフォルトの名無しさん
2005/07/21(木) 01:34:02Perlメモには
srand;
open(FILE, "< $file");
rand($.) < 1 and $line = $_ while <FILE>;
close(FILE);
print $line;
でファイルからランダムに1行選択できる、とありましたが
10行選択したい場合はどのように記述すればよいのでしょうか。
0016デフォルトの名無しさん
2005/07/21(木) 11:59:08>このスクリプトではファイル全体をメモリに読み込まないので
>少ないメモリで実行させることができます.
>また,ファイルの行数があらかじめわかっている必要もありません.
Perlメモのこの考え方だとこう?自信ナサス
識者の方々採点おながいします
$hoge=10;
@array=();
srand;
open(FILE, "< $file");
while (<FILE>) {
if ( rand($.) < $hoge ) {
if ( $. <= $hoge ) {
push @array, $_;
}
else {
$array[int(rand($hoge))] = $_;
}
}
}
close(FILE);
print @array;
0017デフォルトの名無しさん
2005/07/21(木) 12:42:37行の前後関係を保とうとするとさらに一工夫
必要かな。
0018デフォルトの名無しさん
2005/07/21(木) 14:52:24@array = ();
$max = 10;
$n = 0;
srand;
open(FILE, "< $file");
rand($.) < 1 and $array[($n <= $max) ? $n++ : int(rand $max)] = [$_, $.] while <FILE>;
close(FILE);
@array = map { $_->[0] } sort { $a->[1] <=> $b->[1] } @array;
print @array;
て感じかな(未確認)。
0019デフォルトの名無しさん
2005/07/21(木) 14:52:54$n < $max
だな。
0020デフォルトの名無しさん
2005/07/21(木) 15:07:46呼び出すperlスクリプトがあります。solaris9だと上手く動いている
(ように見える)のですが、FreeBSD5.4だと時々thread内で無限ループ
らしき状況に陥ります(ちゃんと動くときもあります)
かたっぱしからprintfを入れてどこで止まってるかを調べてみると、
open文の個所でコマンドを呼び出し中(コマンドは実行されていない)
で止まっています。
単純な
for($i=0;$i<1000;$i++) {
threads->new(\&a,"foo");
};
foreach (threads->list) {
$_->join;
}
sub a {
open(FILE,"echo @_|");
}
だと問題なく動作します。
両OSともperl5.8.7、thread関連はperl -Vの出力では
usethreads=define use5005threads=undef useithreads=define
となっています。
スクリプトの問題なのか、perlの問題なのか、FreeBSDの問題なのか切り分け
ようと思うのですが、どこから手を付けたらよいのでしょうか。
0021デフォルトの名無しさん
2005/07/21(木) 15:32:09ユーザ当たりのプロセス数制限やファイルディスクリプタ数制限に
引っかかってるのかも知れず。そうだとしたら OS 側の設定の問題。
多少面倒でも外部コマンドを使わず組込関数で処理した方がいい
かもね。
002218
2005/07/21(木) 15:54:27($n < $max or rand($.) < 1) and $array[($n < $max) ? $n++ : int(rand $max)] = [$_, $.] while <FILE>;
じゃないといかんな。
0023デフォルトの名無しさん
2005/07/21(木) 16:14:29新しいのをpushするという方法もありそうだ。
002420
2005/07/21(木) 20:08:40独自プロトコルのTCP通信もやっている関係上、組み込み関数だとsocketから作らなきゃならないので
処理能力的にハードルが高いのです(送受信はそうでもないのですが、メッセージの構築に時間が掛かるので)
OS側の制限ならopen時にerrorで終了してもよさそうなんですが、無限ループ状態(もしかしたら
数時間待てば返ってくるのかも)のままなんですよね。
perlスクリプト内でカーネル内メモリを読み出す、なんて出来るんでしょうか?
外部プログラムから読むのであれば、またopenしなきゃなりませんし。。。
0025デフォルトの名無しさん
2005/07/21(木) 20:24:31Perlのライブラリやモジュールなんてthreadのこと
考慮してないのがほとんどだろ
0026デフォルトの名無しさん
2005/07/21(木) 20:43:30fork(2) のコストだってかなりのもんなのではないかとか
0027デフォルトの名無しさん
2005/07/21(木) 20:43:47openでパイプが開いて、処理がPerl側に戻ってくる前に、
プロセスが一杯になってるのでは。
それだとopenはエラーを返さない可能性があると思うけど。
21の言っているように、開けるプロセス数を増やしてみては。
0028デフォルトの名無しさん
2005/07/21(木) 21:04:59eval, die, alart 使ってtimeoutしたら例外飛ばすとか。
とにかくまずはプロセス数の設定を確認・増やしてみて
様子を見るのが一番だと思うけど。
0029デフォルトの名無しさん
2005/07/21(木) 22:01:43use constantによる定数定義をまとめたファイルがあって
それを一度だけrequireして使いたいのですが、
useの有効期限がファイルの終わりまでなので、
requireする側のファイルでは無効になってしまいます。
ファイル間を越えてグローバルに定数を扱うにはどうしたら
良いでしょうか?識者のご意見をお聞かせください!
0030デフォルトの名無しさん
2005/07/21(木) 22:24:59> useの有効期限がファイルの終わりまでなので
これがあるから釣りだと思われたんじゃないか?
BEGIN{
require 'constants.pl';
}
0031デフォルトの名無しさん
2005/07/21(木) 22:28:23[Hoge.pm]
package Hoge;
use base qw(Exporter);
our @EXPORT = qw(HOGE HIGE HAGE);
use constant HOGE => "a";
use constant HIGE => "b";
use constant HAGE => "c";
1;
---
use Hoge;
print HOGE, HIGE, HAGE, "\n";
003215
2005/07/21(木) 22:28:30回答ありがとうございます。
実は時間が差し迫っていたこともあり、実際に書いたコードは
全部ロードしてから n 回選択、と適当な処理にしてしまいました。(趣味のコードです)
最初、私も配列に push していくことを考えていたのですが、
同じ変数に代入し続けないと“結果として確率が均等”が再現できない、と感じて
#open my $fh, "> test"; print $fh join "\n", (1 .. 1000); close $fh;
my @array = ();
my $max = 10;
srand;
open my $fh, "< test";
while (my $line = <$fh>) {
for (my $i = 0; $i < $max; ++$i) {
$array[$i] = $line if rand $. < 1;
}
}
close $fh;
print join "", @array;
こんな風に考えていました。バラバラに代入していく方法でも確率は均等になるのでしょうか。
003315
2005/07/21(木) 22:31:23my @array = ([0=>0]);
my $max = 10;
my $n = 0;
my $rand;
srand;
open my $fh, "< test";
while (my $line = <$fh>) {
$rand = rand;
if ($rand > $array[$#array]->[0]) {
push @array, [$rand, $line];
@array = sort { $b->[0] <=> $a->[0] } @array;
pop @array if ++$n >= $max;
}
}
close $fh;
print join "", map { $_->[1] } @array;
0034デフォルトの名無しさん
2005/07/21(木) 22:43:21俺もExporter使えと誰かが答えていたのを見たような覚えがある。
ところで、ourで@EXPORTなら、pakcage無しで main に入れて
>>30
みたいにするのと変わりが無いかも…。
0035デフォルトの名無しさん
2005/07/21(木) 22:54:58擬似的に定数っぽく見せてるだけなんだよね(あってる?)。
0036デフォルトの名無しさん
2005/07/21(木) 23:03:18基本的には sub NAME { 'value' } というのを作るだけ。> constant
但しこういう中身が一つのリテラルだけのサブルーチンはコンパイル時に
最適化され、関数を呼び出してる部分に値がインライン展開されるので、
実行時には最初から定数を書いてるのと同じになる。
perl -MO=Deparse script として、どういう風に最適化されるか調べてみ。
0037デフォルトの名無しさん
2005/07/21(木) 23:13:09やっぱそうか。
もともと同じ名前で関数実装する以外、定数定義する方法が無かったもんね。
そんな実行オプションがあるとは知らなかった。感謝。
なんか use base Exporter; にしても constant にしても、
Perl の歴史(というのか、微妙な努力というか…)を見るようだ。
0038デフォルトの名無しさん
2005/07/21(木) 23:25:58# もーちょっとやりよーはなかったのかよ……。
0039デフォルトの名無しさん
2005/07/21(木) 23:30:01レス見てたら
use base 'constants.pl';
で逝けそうな気がしてきた。
どうしてもrequireしたい(条件によってファイルを変えるなど)のなら
require 'constants.pl';
@ISA = qw( constants.pl );
じゃ?
また試せる環境にないから投げっぱなしジャーマンスープレックス的レスなんだが。
0040デフォルトの名無しさん
2005/07/21(木) 23:39:48…おまえ、Perlの継承システムを全然理解して無いだろ。
0041デフォルトの名無しさん
2005/07/21(木) 23:58:01禿同
ブロックのeval、もうメチャクチャ。
Error.pm も微妙だけど、そのうちこういうのも吸収されていくのかね。
004239
2005/07/22(金) 00:39:22OOPでもそうでなくてもuse base か@ISA指定でサブルーチンが継承されるのは確認してるよ。
それが正しいかどうかは脇に置くけどね。Exporter自体好きじゃない。
0043デフォルトの名無しさん
2005/07/22(金) 01:16:36…何言ってんだか。>>38ははっきり言って無茶苦茶だぞ。
1.baseプラグマへの引数はファイル名ではなくパッケージ名
2.@ISAへ入れる文字列はファイル名ではなくパッケージ名
3.継承されるのは「メソッド」である。(*)
* 実体はサブルーチンだが、呼び出される過程が全く違うため区別して考える必要がある。
具体的には、継承したメソッドは必ず$class->method()としなければならなず、
「継承」であるため定数サブルーチンであっても「インライン展開」はされない。
定数サブルーチンの場合は結果は同じだが、引数を取る「非メソッドサブルーチン」を
継承しても、メソッドコール構文で呼び出すことは出来ない。
(というか、呼び出しても意味のある結果は得られない。)
0044デフォルトの名無しさん
2005/07/22(金) 01:35:12俺は一応40ではないが。
>>39
を推測。
ひょっとして他の人のレス読んで、constantがサブルーチンなら
use base で呼び出し元のクラスの上(かmain::)に入れようと思ったとか?
ただしpackageは切っといて、Exporter使わない方向で
(rubyのmoduleみたいなもんかな)。
継承させる意味は無いけどな。
ただそれだとmainパッケージに入っていても、main->Const みたいにしか呼べないぞ。
一応、試してはみたが。
004539
2005/07/22(金) 02:33:49継承がパッケージ単位であることはさすがに知ってるよ。
みんな".pl"って時点でpackage化されていない外部ファイルって言う理解なのね?
use base 'constants.pl';
@ISA = qw( constants.pl );
この辺りはファイル名変えるのだりぃから違和感感じながら適当にコピペした。
言いたいことだけ伝わると思ったのよぉ
0046デフォルトの名無しさん
2005/07/22(金) 02:36:41C++/Javaのtry-catchだって
「やってみてだめなら例外投げるから受けとれ」
なんだから、ブロックのeval+$@そのものじゃないか。
入力値のバリデーションの定型句、型キャストに失敗したら
エラーだねって処理なんかスゲー乱暴で好きになれん。
# あくまで好みの問題なんだけどね。
# オフショアで隣国に投げるとき(時間も予算も限られてて
# コーダーに余計なこと考えてほしくない時)なんかは
# try-catchのほうが楽だよな
004720
2005/07/22(金) 13:58:49問題ないのかと思います。
---
#!/usr/bin/perl -w
use threads;
for ($i=0;$i<1000;$i++) {
threads->new(\&a,$i);
}
foreach (threads->list) {
$_->join;
}
sub a {
open(FILE,"(sleep 20;echo @_;sleep 20)|");
@a=<FILE>;
close(FILE);
}
---
004820
2005/07/22(金) 14:00:37---
cputime unlimited
filesize unlimited
datasize 524288 kbytes
stacksize 65536 kbytes
coredumpsize unlimited
memoryuse unlimited
vmemoryuse unlimited
descriptors 39146
memorylocked unlimited
maxproc 19573
sbsize unlimited
---
openで止まっているのは分かったので
open(FILE,"/usr/local/bin/hoge $_|)||return -1;
を
print LOG "opening $thread_id\n";
open(FILE,"/usr/local/bin/hoge.sh $_|)||return -1;
hoge.sh
#!/bin/sh
echo $@ >>/tmp/log
exec /usr/local/bin/hoge $@
と変更し無限ループに見える状況が発生すると、perl側のlogにはopen直前まで来た記録が在りますが、hoge.sh側のlogには記録がありませんので、open文の中身が実行されてないように見えます。
perl側でshellを起動したあとに固まっているのか、shellを起動しようとして固まっているのか、
どうやって調べましょう????
004920
2005/07/22(金) 14:02:27元組込屋なせいかthread safeかどうかは信用できない(w
ので、threads以外はモジュールは使ってません。
#なので、外部プログラムに任せようとしてはまっている、と
新たに言語を覚えるのはきついけど、半端にperlと組み合わせる
よりも全部C++で書き直すほうが早いのかな。。。
>>26
topだと
23526 user 114 0 18100K 16312K CPU1 1 6:15 99.02% 99.02% perl
23472 user 20 0 37156K 33748K kserel 0 2:43 0.00% 0.00% perl
という感じになってます。これがずーっとCPUを占有し続けます。
>>27
上記のようにパイプが開けてないように見えるのです。
プロセス数的には問題ないので(上のサンプルでも動くくらいですし)
どこが悪いんだか?
>>28
thread数の制限は考えたのですが、ちょっと勉強中でして。
socketみたいにselectすればいいのは分かるんですが、
joinするとthreadが終わるまで待ち続けてしまうし。。。
#detachして終わったら共有メモリにでもflagを立てればいいのかな?
0050デフォルトの名無しさん
2005/07/22(金) 14:11:01> perl側でshellを起動したあとに固まっているのか、shellを起動しようとして固まっているのか、
> どうやって調べましょう????
lastcommを有効にすれば一発。
0051デフォルトの名無しさん
2005/07/22(金) 17:15:040052デフォルトの名無しさん
2005/07/22(金) 17:23:10たぶん
・evalの使い方が本来と違っているので違和感がありすぎる
・飛んでくる例外が$@のメッセージというのが気に入らない
という事でしょう。
まぁ eval, $@で例外処理ができるというのは、代替案が無いよりマシ。
0053デフォルトの名無しさん
2005/07/22(金) 21:19:17try{ code }でよかったのに。
0054デフォルトの名無しさん
2005/07/22(金) 21:35:40> eval EXPR と eval BLOCK
その辺のコンテキスト判断がどの言語より人間の意識に近い
(期待通りになる)んでPerlはすごく気持ち良いんだな〜。
$count = @array;
とか。ほかの言語から入ったときまず面食らうのがここなんだが。
0055デフォルトの名無しさん
2005/07/22(金) 21:38:30> どの言語より人間の意識に近い
そうかな〜?
0056デフォルトの名無しさん
2005/07/22(金) 21:44:47趣味で書いてるなら別にどうなってても良いんだけどねぇ。
仕事のはそうはいかない。
新人実戦投入で教えなきゃいけない時とか、他の人のコード読む時に、
いかにもPerlな「こんなのもできるぜコード」があるとすごく困る。
0057デフォルトの名無しさん
2005/07/22(金) 22:16:10だからスラングみたいなのがあるのは仕方ない。
0058デフォルトの名無しさん
2005/07/22(金) 22:17:44コンソールを非表示とか最小化状態で起動するにはどうすればいいですか?
0059デフォルトの名無しさん
2005/07/22(金) 22:21:32chomp (my $dummy = $q->param('content') );
とかな。(´ー`)
そこでコーディング規約なんだが、
強制で規約守らせちまうツールがないんだよな。
EclipseのEPICがもうちょっと良くなってくれれば
いいんだが。。。
0060デフォルトの名無しさん
2005/07/22(金) 23:18:31wperl.exe使うとか?
0061デフォルトの名無しさん
2005/07/23(土) 15:54:23BEGIN {
if ( $^O eq 'MSWin32' ) {
require Win32::Console;
Win32::Console::Free();
}
}
0062デフォルトの名無しさん
2005/07/23(土) 19:05:10use strictとかuse warningsを使う場合、
モジュールの呼び出し元のファイルで一回記述しておけば
呼び出し側ではやらなくても良いのでしょうか?
それともファイル毎に記述すべきですか?
006362
2005/07/23(土) 19:07:27すいません質問です。
use strictとかuse warningsを使う場合、
モジュールの呼び出し元のファイルで一回記述しておけば
モジュール側では記述しなくても良いのでしょうか?
それともファイル毎に記述すべきですか?
0064デフォルトの名無しさん
2005/07/23(土) 19:14:47strict/warningsの有効範囲はプログラム全体でもファイル全体でもなく「ブロック」。
そのくらい試せよ。
0066デフォルトの名無しさん
2005/07/24(日) 00:09:000067デフォルトの名無しさん
2005/07/24(日) 01:33:07>>61
有り難うございます。両方出来ました。
0068デフォルトの名無しさん
2005/07/24(日) 02:09:51インストールし直して見てもダメだったのですが、お知恵をお借りできませんか?
WinXPにActivePerl-5.8.7.813-MSWin32-x86-148120.msiとapache_1.3.33-win32-x86-no_src.msiをインストールしました。
DOS窓でPerl -vした場合も、ちゃんとメッセージが返ってきます。
0069デフォルトの名無しさん
2005/07/24(日) 02:24:23ヒント。
・httpd.confの設定
・+ExecCGI
・ScriptAlias
あとはWebProg板のほうが適切と思われ。
0070デフォルトの名無しさん
2005/07/24(日) 02:24:49それはおそらく、Perlの問題ではなくApatchの設定の問題だと思われます。
また、>>1をご覧になるとわかる通りCGIに関する質問は板違いになるので
Webプログラム板でされた方が回答が得易いかと思われます。
007168
2005/07/24(日) 09:53:48↑これでした。
ありがとう。
板違いだったようで、失礼しました。
0072デフォルトの名無しさん
2005/07/24(日) 15:57:250073デフォルトの名無しさん
2005/07/24(日) 17:08:540074デフォルトの名無しさん
2005/07/24(日) 17:40:510075デフォルトの名無しさん
2005/07/24(日) 18:18:50味噌糞ぐちゃぐちゃ病気言語を自認するPerlとの相性はぴったりだな
0076デフォルトの名無しさん
2005/07/24(日) 18:19:250077デフォルトの名無しさん
2005/07/24(日) 18:21:34NCSA httpd
0078デフォルトの名無しさん
2005/07/24(日) 19:07:32hogeだったとしてスカラー変数$tmpに'hoge($arg)'と代入して、その後
eva $tmp
とすると、Too many argumentsがでます。evalで使用しない場合はでないの
ですが・・・
あとサブルーチンのプロトタイプ宣言をするとToo many argumentsはでなく
なりますね。
これはどういう理屈なのでしょうか?
0079デフォルトの名無しさん
2005/07/24(日) 19:35:230080デフォルトの名無しさん
2005/07/24(日) 19:37:40質問は日本語で書け
0081デフォルトの名無しさん
2005/07/24(日) 20:18:35できるだろうからそれをきっちりさらしてもらった
ほうがいいな。
0082デフォルトの名無しさん
2005/07/24(日) 20:50:52気づいたことがあったので、ぷろPでちょろっと調べたら
事故解決しますたw
0083デフォルトの名無しさん
2005/07/24(日) 22:09:42二度とくるな
0084デフォルトの名無しさん
2005/07/25(月) 12:41:39Perlスクリプトhoge.plを書きまして
Linuxのシェル上から
$ w3m `hoge.pl うんこ`
みたいにすれば文字列「うんこ」の検索結果が表示できるようにしたのですが、
hoge.pl内部にて
system "w3m $uri"; #$uriは作成されたURIの文字列
みたいにして
$hoge.pl うんこ
だけで同様の動作を得ようとすると
Error occured while reset 800b: errno=5
と表示されまともに動作しないのです。アレならhoge.plの中身書きますが、
とりあえずどういう不具合が考えられるでしょうか?
008584
2005/07/25(月) 12:59:21大変失礼しました。
0086デフォルトの名無しさん
2005/07/25(月) 14:45:230087デフォルトの名無しさん
2005/07/25(月) 14:50:070088デフォルトの名無しさん
2005/07/25(月) 15:01:42無名サブルーチンへのリファレンスとか?
0089デフォルトの名無しさん
2005/07/25(月) 15:30:29・現在のコード
・その「関数を変数として扱った」場合の呼び出しコード(希望でよいので)
・どうしてそのように扱いたいのか
を列挙してみましょう。
これらを整理すると、整理中に自己解決したり、検索すべきキーワードが
浮かんだりしますよ。
0090デフォルトの名無しさん
2005/07/25(月) 17:23:15こういう人を見るとホント夏を実感するねえ。
バカだなー、まあ子供だからしょうがないかって。
0091デフォルトの名無しさん
2005/07/25(月) 19:26:330092デフォルトの名無しさん
2005/07/25(月) 19:59:00patches がずらずらでてくるのですが、このようなパッチってどこから入手で
きるのでしょうか?
Locally applied patches:
9676 Port the OpenBSD glob() security patch
9678 Addendum to #9676: some missing changes from OpenBSD glob.c
9679 Up $File::Glob::VERSION, add OpenBSD glob version note
9693 $VERSION and Version() on same line provokes CPAN.pm warning
9706 #7210 broke .packlist generation
9707 ExtUtils::Installed doesn't quote regex metacharacters in paths
9775 Typo in utf8.h
9950 Revert integration of #8254,#8255 in #8620 (causes coredump)
0093デフォルトの名無しさん
2005/07/26(火) 23:02:49にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0094デフォルトの名無しさん
2005/07/26(火) 23:06:15にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0095デフォルトの名無しさん
2005/07/26(火) 23:08:12にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0096デフォルトの名無しさん
2005/07/26(火) 23:10:18にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0097デフォルトの名無しさん
2005/07/26(火) 23:11:53にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0098デフォルトの名無しさん
2005/07/26(火) 23:14:120099デフォルトの名無しさん
2005/07/26(火) 23:17:05にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0100デフォルトの名無しさん
2005/07/26(火) 23:23:20連投いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
0101デフォルトの名無しさん
2005/07/26(火) 23:28:56連投いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
0102デフォルトの名無しさん
2005/07/26(火) 23:30:55いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
0103デフォルトの名無しさん
2005/07/26(火) 23:36:090104デフォルトの名無しさん
2005/07/27(水) 00:03:590105デフォルトの名無しさん
2005/07/27(水) 00:06:34もうおさまったか?
0106デフォルトの名無しさん
2005/07/27(水) 00:42:43連投いい加減にせいよ(゚Д゚)ゴルァ!!
0107デフォルトの名無しさん
2005/07/27(水) 00:59:14連投いい加減にせいよ(゚Д゚)ゴルァ!!
0108デフォルトの名無しさん
2005/07/27(水) 02:00:070109デフォルトの名無しさん
2005/07/27(水) 02:28:300110デフォルトの名無しさん
2005/07/27(水) 06:15:33まさか回答する能力も無いのに偉そうにスレッド批評なんか
してたんじゃあるまいな?
0111デフォルトの名無しさん
2005/07/27(水) 10:02:11コネクションを継続させなくて環境変数とカレントディレクトリを保持すれば
Web Telnetもどきは実現できますよ。
最初にフォームで受取った文字列を `` または open'コマンド|' に渡して
コマンドを実行したら出力結果を標準出力に出力。
コマンド実行後、現在の%ENVの中身とカレントディレクトリを
セッションファイルなり、input hiddenなりで保持。
次回以降の接続毎に保持していた環境変数の内容を%ENVにコピーして
保持していたカレントディレクトリにchdirして、
最初を繰り返せば前回の作業の続きができます。
0112デフォルトの名無しさん
2005/07/27(水) 18:46:23連続投稿になってしまい誠に申し訳ありませんでした。
故意ではありませんが確認を怠った手前のミスとして逝ってきます。
>>111さま
telnet.cgiという名前で似た機能のがwebで落ちてますね。
当方、会社先でセキュリティが厳しくまともに通してくれるのは
25,80,110portぐらいなんです。なのでhttp経由で任意のホストへ接続出来れば
内職がしやすいかなって思いまして。
結局適当なPORTにlistenしてクライアント管理プログラムから
socketでやり取りするプログラムで期待の動作をするサンプル
プログラムが書けました。
所々でブロックしてしまう等、多々問題はありますが1つ1つ改善していきます。
0113デフォルトの名無しさん
2005/07/27(水) 20:29:590114デフォルトの名無しさん
2005/07/27(水) 21:20:33中途半端な知識しか無いのにモラルは最低の厨房
会社から見ると癌以外の何者でもないですね
仕事もできなさそう
0115デフォルトの名無しさん
2005/07/27(水) 21:51:24SoftEther
0116デフォルトの名無しさん
2005/07/27(水) 22:32:360117デフォルトの名無しさん
2005/07/28(木) 18:45:29そこを流れてるパケットを条件が一致したものだけログに取るというスクリプトを
Perlで作ろうとしてるのですが,他のアプリが開いてるソケットのIDを取得するには
どうすればいいのでしょうか?
0118デフォルトの名無しさん
2005/07/28(木) 21:01:45せめてOSを書きなさい
0119117
2005/07/28(木) 21:15:33OSはwindows2000SP4,それにActivePerl5.8を入れて使ってます。
0120デフォルトの名無しさん
2005/07/29(金) 14:01:51>>115紹介の企業ページ注意文を抜粋
> SoftEther を使用すると、会社内のネットワークと外部ネットワークやコンピュータ同士を、
> ネットワーク管理者の許諾を一切得ること無く、無断で接続することができてしまいます。
> ネットワークに関する知識の少ない人がこのような接続を行うと、自分の PC だけではなく、
> LAN に接続された他のすべての PC にも重大な影響が出る場合があります。
>
> また、SoftEther を使用して構築した仮想ネットワーク上のパケットは、会社内 LAN に設置されたファイアウォールや
> ウイルス検出システムは絶対に検知することができません。そのため、社内 LAN のシステム管理者が外部からの攻撃や
> ウイルス感染を防ぐようにシステムを構成していても、SoftEther 仮想ネットワーク経由で社内 LAN にウイルスが
> 感染したり、攻撃の対象となっていまうことがあります。
>
> これらの危険性があるため、SoftEther の使用については、SoftEther の仕組みや各種ネットワーク・プロトコルに
> 関する十分な知識を習得した上で行うようにしてください。特に、社内 LAN などのプライベートネットワークの
> ユーザーは、SoftEther を使用する前に必ずシステム管理者・ネットワーク管理者に対して許可を得てください。
> SoftEther の開発者・配布者は、SoftEther によって引き起こされたすべての損害について一切責任を
> 負いかねますので、ご注意ください。
つまり、>>112のような人は、使わないでねと言ってる。
0121デフォルトの名無しさん
2005/07/29(金) 14:21:21ああいうことをやって、会社のシステムに侵入されて、懲戒免職になった
という人は知っているけどさ。
0122デフォルトの名無しさん
2005/07/29(金) 21:01:36やってる時点でダメだろ
0123デフォルトの名無しさん
2005/07/30(土) 01:36:10PerlのDBIモジュールでDBD::ODBCを使用して
DB(RedBrick)からデータをSELECTすると
-1超0未満の小数点値がおかしくなってしまうのです
(-0.1が-.1になる)。
ちなみにおかしくなってしまう項目の方はDECIMALです。
DOUBLEやFLOAT、CHARなどのデータ型ではおかしくなりません。
しかし、どうしてもDECIMALでなくてはいけなく、困っております。
Perlで置換してしまえばいいのですが、根本的な解決にはならないので
お尋ねした次第であります。
どなたか解決策がわかる方がいましたら教えてください。
もしくは、この質問に適切な板やスレッドがあれば誘導お願いします。
なお、環境は以下のとおりです。
現在手元にか環境がないためうろ覚えです。
Redhat ES3
DBI 1.4くらい
DBD::ODBC 1.13
unixODBC 2.2.6くらい
0124デフォルトの名無しさん
2005/07/30(土) 05:23:53$bの中の文字列はコロコロ変わるので、エスケープは出来ないんですが、
どうすればマッチさせられますか?
0125デフォルトの名無しさん
2005/07/30(土) 05:36:42つ quotemeta関数
0126デフォルトの名無しさん
2005/07/30(土) 09:28:27my $num1 = '-0.1';
my $num2 = '-.1';
print "$num1 == $num2\n" if $num1 == $num2;
my $num3 = sprintf '%f', $num2;
print "$num1 == $num3\n" if $num1 == $num3;
$num2 =~ s/-\./-0./;
print "$num1 == $num2\n" if $num1 == $num2;
>>124
/\Q$b\E/
0127デフォルトの名無しさん
2005/07/30(土) 21:40:53cronの使えない環境で定期的にCGIを動かすにはどうすればいいでしょうか?
全然アクセス数がないのでimgタグとかで動かすってのはできないです。
cronの使えるサーバを別で借りてwgetしても動くんでしょうか?
0128デフォルトの名無しさん
2005/07/30(土) 21:52:06CGI の質問は WebProg 板で。 http://pc8.2ch.net/php/
0129デフォルトの名無しさん
2005/07/30(土) 22:20:16大きな声ではいえないが、ある勘定系システムでは夜間バッチを
なぜかWebAppで作って、wgetで叩いていることを俺は知っている。
おまけにパラメタはget渡しで、サニタイズなし。(-Д-)サムイネェ
だから君の場合cron+wgetでオケーだ。
0130デフォルトの名無しさん
2005/08/01(月) 01:15:55たとえば8/1だとして、
$foo = sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday-2);
とすると
200508-1となってしまいます。
これを20050730とすることはできるのでしょうか?
0131デフォルトの名無しさん
2005/08/01(月) 01:24:250132デフォルトの名無しさん
2005/08/01(月) 01:30:450133デフォルトの名無しさん
2005/08/01(月) 01:31:36$t = timelocal(0,0,0,$mday,$mon,$year);
$t -= 2 * (60*60*24);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($t);
$foo = sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday-2);
0134デフォルトの名無しさん
2005/08/01(月) 03:19:22メッセンジャーのオンライン状態を継続するにはプロセスを維持する必要があります。
while(1){ }のループでソケットの監視を続けたいと考えていますが、
while構文は時間経過によって負荷が増大したりしますか?
ループ内においてメモリを消費し続ける処理はありません。
(もちろん、一定時間によるタイムアウトやリモート操作はできるようにします。)
0135デフォルトの名無しさん
2005/08/01(月) 03:29:57毎日決まった時間になったら、コンソールから動かしたいプログラムの
名前をタイプしてエンターキーを押す。
0136134
2005/08/01(月) 03:52:27レンタルWebサーバでの運用を考えており、
ローカル(Windows2000+ActivePerl)でのテストは実施。
タスクマネージャでプロセスの状態とパフォーマンスの変化を
確認したところ、メモリ・CPUいずれにおいても
時間経過(30分程度)による状態の変化は特にありませんでした。
そこで、実際に運用したいレンタルサーバにおいてはどうか、
テスト環境と異なるOSにおいては負荷が増大する可能性が
あり得るのかを知りたかったというわけです。
もちろん、プロセスが長く残ること自体の是非もあると思いますけど。
実際に運用したいサーバはValue Domainのレンタルサーバ。
仕様は特に明記してあるところが見つからなかったので不明です。
HTTPヘッダにも Server: Apache としか無かったので...
どうぞ皆さまよろすく(゚Д゚)ノ
0137デフォルトの名無しさん
2005/08/01(月) 04:09:42年がら年中起動しっぱなしの人はよくいるね。
0138デフォルトの名無しさん
2005/08/01(月) 06:15:200139デフォルトの名無しさん
2005/08/01(月) 09:02:39use POSIX(strftime);
すると幸せになれるよ。
0140134
2005/08/01(月) 11:30:24試してみたら、おっしゃる通り8分程度で切られますた。
やっぱり自分のサーバでないとだめかぁ(´・ェ・`)
0141デフォルトの名無しさん
2005/08/01(月) 14:25:540142デフォルトの名無しさん
2005/08/01(月) 20:42:29質問とは関係ないし、知ってるかもしれないけど
MSNメッセクライアントならCPANにMSN.pmとか
ttp://www.bot-depot.com/forums/index.php?showforum=12
にMSN2.pmとかあるよ
型落ちの自前鯖で動かしてるけど良好
0143デフォルトの名無しさん
2005/08/01(月) 20:46:140144 ◆TWARamEjuA
NGNG詳細キボンヌ
0145デフォルトの名無しさん
2005/08/01(月) 22:36:51察知されて対策されるだけ。
おまけにペナルティも食らうかも。
0146134
2005/08/02(火) 01:05:02今のスクリプトは最新のコマンドをモニタして、
それに合わせてMSN.pmを少々書き換えながら使ってます。
けどMSN2.pmは知らなかった。ちと見てみる!サンクス
実はAjaxで(関係無いけど)チャットスクリプトを作っていて、
部屋に誰かがログインしたときや特定のコマンドを使ったときに
MSNのメンバリストに登録されている人に通知を送るような仕組みを作ってます。
現段階で一応ひととおりのことは出来ていて、
あとはクライアントのオンライン状態維持が課題だったわけです。
結局、都度プロセス起動→通知処理→終了という動きにせざるを得ないようです。
しかしMSNはアドレス指定でインスタントメッセージの投げっぱなしができるのかと思っていたら、
SwitchBoardのコネクションをユーザごとに確立しなければならないようで...
この構想自体、なんだかわずらわしい仕組みに思えてきたトコです。合掌。
0147デフォルトの名無しさん
2005/08/02(火) 12:55:425分程度で次々に再起動するのはどうだ。
勿論冗談だ。
0148デフォルトの名無しさん
2005/08/02(火) 18:57:25入れると消されなくなるよ。
あ、XCPUをignoreするの忘れずに。
例えば
$SIG{'XCPU'}='IGNORE';
while (1) {
fork && exit;
}
みたいに。
0149デフォルトの名無しさん
2005/08/02(火) 20:25:370150デフォルトの名無しさん
2005/08/02(火) 20:34:33サブクラス MIME::Parser を使ってメール受信をしていますが
添付ファイル名が同一のメールが来た場合に、添付ファイルが上書きされるために、
これを別ファイル名で保存する サブクラス MIME::KbParser を作成してMIME::Parseと同一のディレクトリに
保存しました。しかし、
このパッケージを使っている プログラム の文法チェック perl -wc abc.pl
をかけると、下記のようにエラーになってしまいます。
原因がわかるかたお願いします。
Can't locate MIME/kbParser.pm in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-
linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linu
x-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/
perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/li
b/perl5/5.8.0 .) at preg.pl line 27.
0151デフォルトの名無しさん
2005/08/02(火) 20:38:53情報が少なすぎて何ともいえないが、ファイル名じゃないか?
KbParser.pm <-> kbParser.pm
0152デフォルトの名無しさん
2005/08/02(火) 22:29:30回答ありがとう
書き間違えです、ファイル名はあっています・・
パッケージを追加した場合、なにかperlに対して設定変更が必要なのでしょうか?
0153デフォルトの名無しさん
2005/08/02(火) 23:17:45止まらなくなった…どうやって止めたらいいの?
killしようにもpidがコロコロ変わるのでkillできない!!!
0154デフォルトの名無しさん
2005/08/02(火) 23:18:34かわいそ
0155デフォルトの名無しさん
2005/08/02(火) 23:19:24サンクス
0156デフォルトの名無しさん
2005/08/03(水) 00:14:24pkill(1)
0157デフォルトの名無しさん
2005/08/03(水) 00:18:54のように、%のついてファイル名(写真)を、perlからhtmlを生成して出力しているのですが
ファイル名に % があると、2バイト文字として認識しているのか? 写真が表示できません
うまい回避方法はあるでしょうか?
0158デフォルトの名無しさん
2005/08/03(水) 00:28:55何かを勘違いしている可能性あり。
コード晒せ。
0159デフォルトの名無しさん
2005/08/03(水) 00:39:420160デフォルトの名無しさん
2005/08/03(水) 00:51:42PGIDしらべてプロセスグループを殺すとか、
調べるのめんどくさければ他のも巻き添え
食うの覚悟でkill -1という手もある。
0161デフォルトの名無しさん
2005/08/03(水) 01:03:22>kill -1
ドラえもんが、ネズミを駆除するのに「地球破壊ばくだん」を使おうとした話を
思い出したw いや確かに、繁殖力の強いネスミを絶滅させるにはそれしかないん
だろうけどw
0162デフォルトの名無しさん
2005/08/03(水) 01:05:04じゃあ、単純に
/var/www/hoge/hoge%hoge.jpg
というファイルがあって、それをブラウザで表示する
http://hoge.com/hoge%hoge.jpg
とやっても表示されない
ファイル名を hogehoge.jpgとして
http://hoge.com/hogehoge.jpg
とすると表示されます。。
なんででしょ?
0163デフォルトの名無しさん
2005/08/03(水) 01:11:42rfc1738
0164デフォルトの名無しさん
2005/08/03(水) 02:05:05サンクスコ
% → %25 で直りマスタ
0165デフォルトの名無しさん
2005/08/03(水) 02:07:47> じゃあ、単純に
> /var/www/hoge/hoge%hoge.jpg
>
> というファイルがあって、それをブラウザで表示する
> http://hoge.com/hoge%hoge.jpg
http://hoge.com/hoge%25hoge.jpg
でイクのかな?
っていうか、ブラウザのメッセージくらい見ろよ。
0166デフォルトの名無しさん
2005/08/03(水) 09:52:58HTTP_REFERERでパスが漏れるのが心配なんですが
他のサイトへのリンクを貼らなければ大丈夫ですか?
0167デフォルトの名無しさん
2005/08/03(水) 10:51:47&jcode'convert()
&jcode::convert()
(引数省略)
エディタの色分けがおかしくなってしまうので、「::」の形式に統一したいのですが
問題ないでしょうか?
0168デフォルトの名無しさん
2005/08/03(水) 11:02:52その糞エディタを(ry
他人のコードを読むにあたってエディタの都合で
コード改変というのは発想が間違っている。
そもそも質問にあるようなコードぐらい自分で検証できんのかと。
0169デフォルトの名無しさん
2005/08/03(水) 11:38:54> 地球破壊ばくだん
正確には「地球はかい爆弾」。
・・・恐ろしくどうでもいい指摘だなw
0170デフォルトの名無しさん
2005/08/03(水) 12:42:38perlmodによれば
古いパッケージ区切り子はシングルクォートでしたが、
現在はダブルコロンを使うのが推奨されています。
なぜなら、この方が人間が読みやすいということと、emacsで読みやすいからです。
これはまた、 C++プログラマーに自分が知っていることのように思わせるようにもします。
それは以前のシングルクォートがAdaプログラマに馴染みのものでであったことと同じです。
0171デフォルトの名無しさん
2005/08/03(水) 13:37:57>>170
レスありがとうございます。
コード改変についてはそれが許されている状況だったもので。
検証はしてみたのですが、違いが無かったので心配したわけです。
ありがとうございました。
0172デフォルトの名無しさん
2005/08/03(水) 14:11:46そのパスワードが漏れてもいいようなどうでもいいものならそれでいいんじゃね?
0173デフォルトの名無しさん
2005/08/03(水) 14:18:33168は許されている許されていないの問題ではなく、
エディタの都合でソースを弄るということが
決定的な間違いだと言っておると思うのだが。
0174デフォルトの名無しさん
2005/08/03(水) 14:37:37Perl4時代の古い習慣だし、直していいんじゃね?
コロン2つになった理由の一つもコレだし↓
>なぜなら、この方が人間が読みやすいということと、emacsで読みやすいからです。
~~~~~~
ついでに言うと、古い*.plライブラリを*.pmモジュールに変換する
pl2pmなるユーティリティがPerlディストリビューションに含まれている。
つまり、これは非常識でもなんでもない。
0175デフォルトの名無しさん
2005/08/03(水) 15:12:05仕事が遅くなるだけじゃねーかw
そんな考え、誰も評価しませんから〜。!残念!
0176デフォルトの名無しさん
2005/08/03(水) 16:59:120177デフォルトの名無しさん
2005/08/03(水) 17:32:190178デフォルトの名無しさん
2005/08/03(水) 21:25:280179デフォルトの名無しさん
2005/08/04(木) 13:20:27makeは成功したが、make testで
$ make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/GD..........Can't load './blib/arch/auto/GD/GD.so' for module GD: dlopen: libgd.so: symbol "iconv_open"
unresolved at /usr/local/lib/perl5/5.8.0/alpha-dec_osf/DynaLoader.pm line 229.
at t/GD.t line 13
と出てテストが失敗してしまう
0180デフォルトの名無しさん
2005/08/04(木) 16:35:08cのgetprognameみたいなものってありますでしょうか?
$0を自分で整形するのが普通なんでしょうか?
0181デフォルトの名無しさん
2005/08/04(木) 18:17:33パールは、クライアントの入力情報を反映させて、
HTMLソースを生成できますが、
HTMLソースにパールを埋め込んで?(そのページが「○○○.cgi]ではなく「○○○.htm」の形で)
クライアント(HP閲覧者)の環境変数を取得することは可能でしょうか?
他に環境変数を取得できる方法とその言語、そのサーバーの環境を教えてください。
よろしくお願いします。
0182181
2005/08/04(木) 18:20:080183デフォルトの名無しさん
2005/08/04(木) 20:51:500184デフォルトの名無しさん
2005/08/04(木) 21:58:35WebProgへ行きなされ
0185デフォルトの名無しさん
2005/08/04(木) 22:03:43それが最近はあるんだな。オレはFreeBSDしか知らんが
HISTORY
These functions first appeared in NetBSD 1.6, and made their way into
FreeBSD 4.4.
だそうだ。
0186デフォルトの名無しさん
2005/08/04(木) 22:10:27それは C にあるとは言わん
0187デフォルトの名無しさん
2005/08/04(木) 22:19:13File::Basenameあたりは使えると思うけど、もっと
これ専用のものってなんかあるっけ?
0188デフォルトの名無しさん
2005/08/04(木) 23:20:24$0に代入するとperlの中の人がsetprogname()を呼んでいる。
0189デフォルトの名無しさん
2005/08/04(木) 23:22:380190デフォルトの名無しさん
2005/08/04(木) 23:22:55それならプログラム先頭で (my $__progname = $0) =~ s,.*/,,; で十分だろ。
Cのgetprogname()もやってることは同じだ。
0191デフォルトの名無しさん
2005/08/04(木) 23:23:140192デフォルトの名無しさん
2005/08/05(金) 11:08:49ありがとうございました。
FindBinってのもあるみたいです。
0193134
2005/08/05(金) 11:35:29そんなワザがあるのかぁ…勉強になります。
とりあえず今回は穏便に、毎回プロセスを終了するようにしますた。
カネ払ってしまったからリスクのあることは出来ないのでね…
0194デフォルトの名無しさん
2005/08/05(金) 12:40:57こういうログがあるときに、
perl -ne 'if(/from=<info@mail.[^>]+\.(com|net)>.*msgid=<[^>]+qmail@mail.*relay=\[([0-9]+(\.[0-9]+){3})]/) { print "$2\n" }' /var/log/syslog
だとマッチするのに
perl -ne 'if(/from=<info@mail\.[^>]+\.(com|net)>.*msgid=<[^>]+qmail@mail.*relay=\[([0-9]+(\.[0-9]+){3})]/) { print "$2\n" }' /var/log/syslog
だとマッチしないのはなぜですか?
0195デフォルトの名無しさん
2005/08/05(金) 13:31:48> そんなワザがあるのかぁ…勉強になります。
×ワザ
○ワナ
0196デフォルトの名無しさん
2005/08/05(金) 13:56:40@mailが展開されてたぶん空文字列になってるから。
0197デフォルトの名無しさん
2005/08/05(金) 16:50:54okay!
Thanks.
0198デフォルトの名無しさん
2005/08/05(金) 21:39:47Sendmailなんて化石のようはソフトを使ってるから
0199デフォルトの名無しさん
2005/08/05(金) 21:47:580200デフォルトの名無しさん
2005/08/05(金) 22:11:38え? SenderID とか Domainkeys とかの最新技術にまともに対応してんのって、
sendmail くらいしか無いじゃん。どこが化石よ。
0201デフォルトの名無しさん
2005/08/06(土) 03:31:49>>198をよく見ればわかるけど初心者を相手にしてどうする?
そのうち彼はperlのことも化石にしてしまうと思うぞ。
0202デフォルトの名無しさん
2005/08/06(土) 03:51:500203デフォルトの名無しさん
2005/08/06(土) 15:04:55ということをやらせたいのですが、sjisで書くと通りません
全角文字部分をヒアドキュメントにするにはどうすればいいですか
0204デフォルトの名無しさん
2005/08/06(土) 15:19:58ローマ数字の 9 は Shift_JIS だと \x87\x5C で、
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#errors
の「エラーにはならないけど文字化けする(1)」に相当する。
0205デフォルトの名無しさん
2005/08/06(土) 15:41:43use encoding "cp932";
0206デフォルトの名無しさん
2005/08/06(土) 17:43:44�\
EOF
s/$pat/IX/g;
のようにすると、
Trailing \ in regex m/�\/ at xxx
というエラーになります
chomp($pat = <<EOF);
�\
EOF
s/$pat/IX/g;
とすると、IXではなくIX\になります
よく判りません
0207デフォルトの名無しさん
2005/08/06(土) 18:00:06>>205
0208デフォルトの名無しさん
2005/08/06(土) 18:01:280209デフォルトの名無しさん
2005/08/06(土) 18:09:47ということですね
0210デフォルトの名無しさん
2005/08/06(土) 18:38:200211デフォルトの名無しさん
2005/08/06(土) 18:45:55ヒアドキュメントを使った方法は不可能です
0212デフォルトの名無しさん
2005/08/06(土) 18:47:493行目が嘘。
>>206
$pat の中身は \x87\x5C なので何の解決にもなっていない。
>>207
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#regexp
0213デフォルトの名無しさん
2005/08/06(土) 19:02:45ヒアドキュメントを使うことで回避できるけれど、
この場合はパターンマッチの中に使おうとしており、
どうせ文字列の評価が発生するので避けられない
何か方法がありそうな口ぶりの>>208や>>210は
ただの知ったかぶり
0214デフォルトの名無しさん
2005/08/06(土) 21:04:432: my $mw = new MainWindow();
3: my $img = $mw->Photo(...);
これの3行目の処理をCから行いたいのですが、
どうすればいいのでしょうか?
Tk_CreatePhotoImageFormat を使う方法は出来たのですが、
これではPerl側が画像を作るのを待つしかありません。
そうじゃなくて、Cから画像を作りたいのですが、どうすればいいのでしょう。
0215デフォルトの名無しさん
2005/08/06(土) 22:00:41ヒント: call_sv
0216デフォルトの名無しさん
2005/08/07(日) 00:12:33方法ってある?
0217デフォルトの名無しさん
2005/08/07(日) 00:15:500218デフォルトの名無しさん
2005/08/07(日) 00:19:35Devel::DProf
0219デフォルトの名無しさん
2005/08/07(日) 01:29:45Devel::Profile
0220216
2005/08/07(日) 01:53:14やってみます
0221デフォルトの名無しさん
2005/08/07(日) 03:10:48#!C:/perl/bin/perl
open(IN, "./001.gif");
binmode(IN);
read(IN, $image, -s "./001.gif");
close(IN)
binmode(STDOUT);
print "Content-type: image/gif\n";
print $image;
exit;
上のcgiをローカルのテストサーバー(http://127.0.0.1/001.cgi)で表示させようとしても
Internal Server Errorと表示されます
どこが間違っているのでしょうか?
0222デフォルトの名無しさん
2005/08/07(日) 03:33:490223デフォルトの名無しさん
2005/08/07(日) 03:37:09OK、ジョニー、ICIC
;が抜けてるのと
./が余計だったんだな
0224デフォルトの名無しさん
2005/08/07(日) 04:03:160225デフォルトの名無しさん
2005/08/07(日) 04:12:22Cのほうがやりやすいわ
0226デフォルトの名無しさん
2005/08/07(日) 04:16:560227デフォルトの名無しさん
2005/08/07(日) 04:17:55Perlの複雑さは並じゃない。更に不条理(ry
>>215
サンクスです。
0228デフォルトの名無しさん
2005/08/07(日) 06:25:39なんたって
print "Hello world.";
でOKだからな。
0229デフォルトの名無しさん
2005/08/07(日) 10:43:370230デフォルトの名無しさん
2005/08/07(日) 12:13:56むしろそういうところがややこしい
Cなら関数にかならず()をつけるのだが、こっちは省略OKなんだろ
、がくるのかスペースがくるのかが曖昧なんだよ
そういう点ではCに慣れた人にはとっつきにくい
0231デフォルトの名無しさん
2005/08/07(日) 12:19:47Spidering Hacksでライブラリの使い方知ってから奥深さに気がついた
0232デフォルトの名無しさん
2005/08/07(日) 12:21:17省略 OK だが、省略しなければいけないワケではない。
嫌なら自分で () 付ける癖を付ければいいだろう。
読む時はほとんど問題にならないし。
0233デフォルトの名無しさん
2005/08/07(日) 13:18:45一つ一つの要素を取り出すときに、よく使われる表現や関数などは
どのような物がありますか?
文字コードをチェックしていくのは効率が悪いと思うので。
0234デフォルトの名無しさん
2005/08/07(日) 13:23:22split
0235デフォルトの名無しさん
2005/08/07(日) 13:23:540236デフォルトの名無しさん
2005/08/07(日) 14:03:200237デフォルトの名無しさん
2005/08/07(日) 14:26:54ありがとうございました。
0238デフォルトの名無しさん
2005/08/07(日) 15:46:18まあ自分でプログラム組むときはそれでいいけど
他人のソースを解読するときに$_とかそういうのが出てくると一瞬戸惑う
0239デフォルトの名無しさん
2005/08/07(日) 16:22:31他人が読むときに大変だとか考える必要はありません
0240デフォルトの名無しさん
2005/08/08(月) 00:18:09my $file = shift;
my $openmode = O_WRONLY|O_CREAT;
$openmode |= O_EXCL if !$cfg->{overwrite};
sysopen my $fh, $file, $openmode or die "Error: $!\n";
binmode $fh, ':raw';
flock $fh, LOCK_EX or die "Error: $!\n";
seek $fh, 0, 0 or die "Error: $!\n";
truncate $fh, 0 or die "Error: $!\n";
return $fh;
}
ファイル名を引数にとって、ファイハンドルを返すんだけど、このコードでなにか問題点あったら指摘してくれ。
sysopen使ったことないからよくわからん。
(サブルーチン名は適当)
0241デフォルトの名無しさん
2005/08/08(月) 00:47:160242デフォルトの名無しさん
2005/08/08(月) 02:24:46<q cite="http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod">
変数のスコープや性質を表現するのに、大文字小文字を使うと便利でしょう。
</q>
if ! なんて書くなら unless にするとか、なぜ %cfg じゃなくわざわざ
ハッシュリファレンスなのよとか、こんな限定された開き方をサブ
ルーチン化する必要があるほど頻繁にやるのかとか、どうせなら
クラス書けよとか、サブルーチンの最後で値を返す時は陽に return
しない方が速いとか、嗜好の違いからくる指摘は色々できるな。
0243デフォルトの名無しさん
2005/08/08(月) 03:05:020244デフォルトの名無しさん
2005/08/08(月) 03:06:080245デフォルトの名無しさん
2005/08/08(月) 03:10:05よくそれ聞くんだが、そう言う場合って完全にflockは使えないの?
お気に入りの方法あったら教えてくだはい。。
0246デフォルトの名無しさん
2005/08/08(月) 05:59:38http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
0247デフォルトの名無しさん
2005/08/08(月) 10:57:38O_TRUNCみたいなファイルをいじってしまうオプションつけてない
からそれ自体は別に問題ないと思う。
むしろ問題なのは何をやるつもりなのかが明確に示されてない
ことだ。それがないとこれでいいのかどうかはなんとも言えない。
「ファイル名を引数にとって、ファイハンドルを返す」もの
ではあるようだが。
truncateの前のseekはあきらかに無駄だと思うけどね。
0248デフォルトの名無しさん
2005/08/08(月) 14:02:500249デフォルトの名無しさん
2005/08/08(月) 14:55:32http://perldoc.jp/docs/modules/PAR-0.75/lib/PAR/Intro.pod
0250デフォルトの名無しさん
2005/08/08(月) 16:26:06ふつうにopenで読み込むとメモリが大量に食われてしまいます
どのようにすれば回避できますか?
ちなみに処理の内容は、改行ありのテキストを配列に読み込んで
一行ずつ特定の文字を置き換えるだけです。
0251デフォルトの名無しさん
2005/08/08(月) 16:42:36ふつうにopenすりゃ良いんだけど、配列に読み込まず一行ずつ読み込んで処理汁
ファイルに書き出す必要があるならテンポラリファイルに書き込む。
で、その後リネーム
0252250
2005/08/08(月) 21:50:49ありがとうございます
0253デフォルトの名無しさん
2005/08/09(火) 00:07:59末尾が英小文字.xxx.yyy だったらTrue を返す正規表現って
どう書けばいい?
例:'abc.xxx.yyy' True
'abc.xxx.yyy' False
([a-z]+\.)+(?!xxx\.yyy)$
と書いたけど、ねらったようにTrue にならない。
「(?!xxx.yyy)」と「$」を組み合わせると
うまくいかないみたいだけど。
誰か正規表現のプロいない?
0254デフォルトの名無しさん
2005/08/09(火) 00:10:18でいいんじゃないのか?
0255デフォルトの名無しさん
2005/08/09(火) 00:15:01[a-z]\.xxx\.yyy$
かな。
てか2つの例の違いがわからんのだが。
0256デフォルトの名無しさん
2005/08/09(火) 00:56:07ごめん、例を間違えたorz
書き直し。
$_ に文字列が入っている場合に
末尾が英小文字.xxx.yyy 以外だったらTrue を返す正規表現って
どう書けばいい?
例:'abc.xxx.yyy' False
'abc.xxx.yyy.zzz' True
([a-z]+\.)+(?!xxx\.yyy)$
と書いたけど、ねらったようにTrue にならない。
「(?!xxx.yyy)」と「$」を組み合わせると
うまくいかないみたいだけど。
誰か正規表現のプロいない?
0257デフォルトの名無しさん
2005/08/09(火) 01:01:38> >>253
ごめん、質問も訂正してあります。
末尾が英小文字.xxx.yyy だったらTrue を返す正規表現って
↓
末尾が英小文字.xxx.yyy 以外だったらTrue を返す正規表現って
「以外」の文字が増えています。
0258デフォルトの名無しさん
2005/08/09(火) 01:05:16!/[a-z]\.xxx\.yyy$/
0259デフォルトの名無しさん
2005/08/09(火) 01:58:04末尾の$との組み合わせでは、(?!pattern) がゼロ幅という事をお忘れなく。
see also "perlre" man page.
がんばって全部を1本の正規表現だけで記述するよりも、
unless 使ったり複数の簡単な正規表現に分けたほうが良い。
オートマトンが短くなれば処理コストも少なくて済む。
0260デフォルトの名無しさん
2005/08/09(火) 02:51:43HTTP::Liteってスレッドセーフではないよね?
LWPはスレッドセーフですか?
0261デフォルトの名無しさん
2005/08/09(火) 03:15:33Perlってスレッド毎にシンボルテーブルをコピーして分けてるらしいよ。
んで、スレッドの機能を使うモジュール(threads::shared等)を使わない限り、
別のスレッドのシンボルテーブルにはアクセス出来ない仕様。
だからPurePerlのモジュールは全てスレッドセーフ。
ただ、オブジェクトをスレッド間で共有して使いたいのなら、呼び出す側で同期を取らないと。
0262デフォルトの名無しさん
2005/08/09(火) 03:37:24書いているのは、スレッドを何本も立ち上げて、でもってそれらが
終了するのを待つってだけの単純なもの。
スレッド内ではHTTP::Liteでウェブサーバにアクセスして、取得した
データを加工してる。
デフォルトで非共有なのは知っていて、だからこそスレッド内の変数は
全てmyで一切共有しないようにしてるんだが、実際のところはスレッド間で
HTTP::Liteの戻り値(=取得したhtml)がかぶる。これは本来ならば
毎回違う値が帰ってくるはずなのですが。。。
0263デフォルトの名無しさん
2005/08/09(火) 05:34:06実際に適当な文字列を書き込むスクリプトを書いてくれると幸いです。
また、2chのbeにログインして書き込む場合のスクリプトも書いてくれれば幸いです。
0264デフォルトの名無しさん
2005/08/09(火) 05:35:38目で確かめたのなら兎も角(それも問題だが…)
取得したデータの比較の処理を見直した方がいいかもしれないですね。
0265デフォルトの名無しさん
2005/08/09(火) 05:39:51>>264 は >>262 へのレス。
>>263
トーク2ちゃんねるってサイトがあったと思うんだけど、
確か分かりやすい説明があったと思うよ。
0266デフォルトの名無しさん
2005/08/09(火) 05:57:12見つかりません。
0267デフォルトの名無しさん
2005/08/09(火) 06:27:53デバッグ用にSTDERRに出力しています。
つーか、考えていてもらちがあかないので、Socket使って自力でHTTPを喋ることにする。
車輪の再発明だが仕方ない。
0268デフォルトの名無しさん
2005/08/09(火) 06:39:59talk2chで検索。
>>267
LWPも駄目でした?
0269デフォルトの名無しさん
2005/08/09(火) 07:33:31うん、これを「!」なしの正規表現だけで表したいのです。
0270デフォルトの名無しさん
2005/08/09(火) 07:39:31perlre 読み直します。
プログラムで記述したいのですが、
それができないところで使いたいのです。
Perl の正規表現と同じ構文を使って
True かFalse を判定し、
その後の処理を変えるというシステムがあります。
そのシステムで利用する正規表現が必要なのです。
0271デフォルトの名無しさん
2005/08/09(火) 07:53:23これじゃ駄目か?
0272デフォルトの名無しさん
2005/08/09(火) 07:58:49/[^\W\d_x]...\.[^\W\d_y]...$/
0273デフォルトの名無しさん
2005/08/09(火) 08:30:090274デフォルトの名無しさん
2005/08/09(火) 09:37:02"!"なしにしなければいけない理由はあるのか?
0275デフォルトの名無しさん
2005/08/09(火) 10:51:59パターンが別にファイルか何かになってて、
正規表現読み込んで使うことになってるんじゃないのかなぁ。あくまで想像だけど。
だから1本のパターンでしか書けない。
/^([a-z]+\.)+(?!xxx\.yyy).{7}$/
だと1本で書けるけど。
末尾のマッチさせたくない文字列長分、ピリオドで埋めないといけないね。
0276デフォルトの名無しさん
2005/08/09(火) 11:02:18ググってみたら以下のコードがあったのですが、まったく変化なし
何かよい方法ありませんか?
require 'jcode.pl';
sub GL_ConvChara{
my ($conv_str)=@_;
my $bef = "0123456789"
."abcdefghijklmnopqrstuvwxyz"
."ABCDEFGHIJKLMNOPQRSTUVWXYZ";
my $af = "0123456789"
."abcdefghijklmnopqrstuvwxyz"
."ABCDEFGHIJKLMNOPQRSTUVWXYZ";
&jcode'tr(*conv_str,$bef,$af);
return $conv_str;
}
0277デフォルトの名無しさん
2005/08/09(火) 12:45:45何も考えずに use encoding で tr/[A-Z]/[A-Z]/ するとか、
Perl4なら $tbl{A} = 'A' みたいなのを用意して
$ptn=join('',keys %tbl);
$ptn =~ s/(\W)/\\$1/g;
$ptn=join($ptn,'([','])');
s/$ptn/$tbl{$1}/g するとか。
0278デフォルトの名無しさん
2005/08/09(火) 18:11:22/(?<![a-z]\.xxx\.yyy)$/
ではダメ?
0279278
2005/08/09(火) 18:12:010280デフォルトの名無しさん
2005/08/09(火) 22:11:23print "Content-type: text/html; charset=Shift_JIS\n\n";
open(IN, "counter.txt");
$count = <IN>;
close(IN);
$count++;
open(OUT, "> counter.txt");
print OUT $count;
close(OUT);
print <<EOM;
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title></title><body background="neko.gif" text="" link="" vlink="" alink="red"></head>
<body>$count</body></html>
EOM
exit;
他にcounter.txtを属性を666に設定し同じフォルダに置いてcgiは755に設定してサーバにアップロードしましたが、Internal Server Errorになって表示したいようにできません。
どこが悪いのでしょう?
0281デフォルトの名無しさん
2005/08/09(火) 22:28:01板違い
0282デフォルトの名無しさん
2005/08/09(火) 22:32:25頭
0283デフォルトの名無しさん
2005/08/10(水) 00:54:22「perlで作ったプログラムがメールを自動受信をして、ファイルを作成する」
というようなことはできるのでしょうか?
たとえば、メールを受信しsubjectを見てある特定の文字に反応してメールを転送するとか、
画像を添付してメールを送り、それをperlが自動で読み込みブラウザ上の画面に写真を追加する
といったことがしたいと考えています。
どうでしょうか?
0284デフォルトの名無しさん
2005/08/10(水) 00:58:160285デフォルトの名無しさん
2005/08/10(水) 01:00:17君の場合、携帯対応の無料BBSで我慢したほうがいいと思う。
とりあえずいらん改行すんな。
0286デフォルトの名無しさん
2005/08/10(水) 01:27:35> /(?<![a-z]\.xxx\.yyy)$/
> ではダメ?
これでできました。
ありがとうございます。
0287デフォルトの名無しさん
2005/08/10(水) 01:29:23> 後から「.xxx.yyyじゃなくて.ne.jpの時の方法も教えてください」とか言いそうな気がする
今回教えてもらった正規表現の応用だから、
わざわざ教えてくださいっていう必要はないと思うけど?
0288デフォルトの名無しさん
2005/08/10(水) 01:31:23>>275
> パターンが別にファイルか何かになってて、
> 正規表現読み込んで使うことになってるんじゃないのかなぁ。あくまで想像だけど。
> だから1本のパターンでしか書けない。
ちょっと違うけど、そんな感じの制約があるのです。
0289デフォルトの名無しさん
2005/08/10(水) 04:34:49> というようなことはできるのでしょうか?
できます
0290デフォルトの名無しさん
2005/08/10(水) 07:59:13cpanのmoduleをいくつか見てみたけど、unix系OS依存のものばかりだったんで。
0291デフォルトの名無しさん
2005/08/10(水) 08:21:47このへんのどこかにない?
ttp://search.cpan.org/search?query=Win32&mode=module
0292デフォルトの名無しさん
2005/08/10(水) 08:29:240293デフォルトの名無しさん
2005/08/10(水) 08:31:16Thx.
Win32で探せばいいんですね。dfやらdisk spaceやらで捜してました。
0295デフォルトの名無しさん
2005/08/10(水) 14:04:30beとか分かりません
0296デフォルトの名無しさん
2005/08/10(水) 17:40:472.クッキーをサーバに送信するにはどうすればいいか。
use HTTP::COOKIES;
まで分かった。
0297デフォルトの名無しさん
2005/08/10(水) 18:12:23自分で作ろうかと思い、とりあえずperldocでhtml化するようなオプションなんぞ
あるのかなとおもって調べてみたんですが、みあたりませんでした。
perlにはjavadocなみのドキュメントhtml化ツールってありますか?
0298297
2005/08/10(水) 18:28:440299デフォルトの名無しさん
2005/08/10(水) 19:06:330300 ◆TWARamEjuA
NGNG# --- LWP::UserAgent のオブジェクト
my $UA = LWP::UserAgent->new(
agent => qq|monazilla/1.00"|,
cookie_jar => { file => "./Rock54_members.cookies" },
timeout => $Wait,
);
久喜を保存するファイルを生成して・・・
$UA->cookie_jar->save;
で、久喜を格納して・・・
# 読みに行く。
$UA->cookie_jar->load;
my $search_response = $UA->get( qq|http://$Valid_2chfind_host/$query| );
で、久喜を食べさせるみたいな。
Rock54のとある装置から引用。
0301デフォルトの名無しさん
2005/08/11(木) 07:06:14my $UA = LWP::UserAgent->new(
agent => qq|monazilla/1.00"|,
cookie_jar => { file => "./Rock54_members.cookies" },
timeout => 5,
);
$UA->cookie_jar->save;
$UA->cookie_jar->load;
my $request = $UA->get( qq|http://www.google.co.jp/| );
実行した後のRock54_members.cookiesの中身
#LWP-Cookies-1.0
無理なようです。
0302ヽ(´ー`)ノ ◆.ogCuANUcE
2005/08/11(木) 15:11:09GET する前に save してるんだから中身があるわけないだろう。
use strict;
use warnings;
use LWP::UserAgent;
my $user_agent = LWP::UserAgent->new(
cookie_jar => { file => 'www.google.co.jp.cookie_jar' },
);
my $request = $user_agent->get('http://www.google.co.jp/');
$user_agent->cookie_jar->save();
コードが何やってるか理解しる。
0303デフォルトの名無しさん
NGNG#LWP-Cookies
0304デフォルトの名無しさん
2005/08/12(金) 00:47:552,foo,111,FOO
=,aaa,1,yy
なんてデータがあった場合
hoge,HOGE,foo,FOO,aaa,,yy
って単語を配列@aに格納する
ワンライナーを教えてください
0305デフォルトの名無しさん
2005/08/12(金) 01:05:02仕様をもうちょい詳しく書かないと適当なコードしか書けんよ?
aaa,,y で , が 2 つ入ってるの何?とか、Hoge が HOGE になってるの何?とか。
>perl -ne 'chomp; $i = 0; push @a, grep { $i++ % 2 } split /,/;'
0306デフォルトの名無しさん
2005/08/12(金) 01:06:451行中に複数存在する英単語をファイルからすべてを
配列にとりこみたいです。
0307デフォルトの名無しさん
2005/08/12(金) 01:21:03-ne だと本当に取り込んだだけになるけど…
要求仕様には沿ってるね…
0308デフォルトの名無しさん
2005/08/12(金) 02:52:42モジュール等があったら教えて頂けると嬉しいです。。
0309デフォルトの名無しさん
2005/08/12(金) 03:00:460310デフォルトの名無しさん
2005/08/12(金) 07:34:582列目、4列目を格納 push @a, (split /[,\n]/,$_)[1,3] for @data;
アルファベットなら格納 @a = grep { /^[a-z]+$/i } split /[,\n]+/, join /,/, @data;
0311デフォルトの名無しさん
2005/08/12(金) 08:28:33@a = $data =~ /(\w+)/gs;
がいいんじゃないのかな
0312デフォルトの名無しさん
2005/08/12(金) 11:37:35添付ファイルは主に画像ファイルを想定してますが他のファイルも対応できるようならしたいです。使用するブラウザは主にネスケ、できればIE,FireFoxなども。
---以下HTML---
<form method="POST" action="../test.cgi" ENCTYPE="multipart/form-data">
<input name="file_path" type="file">
</form>
--以下Perl--
my $cgi = CGI::new();
$test = $cgi->param('file_path');# 添付ファイル
sub MailSendTemp{
my ($values) = @_;
my $mailfrom = 'test@xxxxx'; #From
my $mailto = 'test@xxxxx'; #To
my $subject = 'test'; #Subject
my $message = 'testです'; #Message
my $bcc = 'test@xxxxx'; #Bcc
my $filename = $values; #Temp
$subject = mimeencode( jcode'jis($subject) );
$message = jcode'jis($message);
my $msg = MIME::Lite->new(From => "$mailfrom",To => "$mailto",Bcc => "$bcc",Subject => "$subject",Type => 'multipart/mixed');
$msg->attach(Type => 'text/plain; charset="iso-2022-jp"',Data => "$message");
$msg->attach(Type => 'application/octet-stream',Data => "$attachment",Filename => "$filename",Disposition => 'attachment');
$msg->send();
}
0313デフォルトの名無しさん
2005/08/12(金) 13:26:32希望:
『WindowsXP 環境で ActivePerl5.8.6を使い、完全にSJIS
環境だけで まともな漢字混じりの入出力が出来るようにしたい。』
漢字コードはあくまでも SJISしか認めないという前提の下で
1)すなわち、ソースコーディングはSJISで書く。
2)ファイルの入出力ももちろん SJIS
3)成果はTkモジュール上に表示するけど、これも SJIS
4)また、デバッグ情報はCMD.exe上から起動することを
考慮して、print "表示" などもSJISでまともに表示される
これらを達成するにあたり、ベストな順として
A) 既存の(SJIS対応の)Jperl5 やUTF-8不完全対応時代のPerl5.6
ソースがそのまま使える。
B) ソース頭などに、特別な記述やプラグマを書いて対処する
C) インストール先のPerlシステム部分を変更する。
D) ソースの入出力部分を場合に応じて変更する
が、思いつくんだけど、どこまで実現可能なんだろうか。
はっきり言ってUTF-8なんぞ、対応して欲しくも無かった。。。
0314デフォルトの名無しさん
2005/08/12(金) 13:36:175.8.1以上ならuse encoding 'Shift-JIS';
0315デフォルトの名無しさん
2005/08/12(金) 16:28:56こっちじゃ動くよ。環境は?
HTTP::Response の中身がどうなってるか気になる。
>>313
> はっきり言ってUTF-8なんぞ、対応して欲しくも無かった。。。
俺は CSI 派だから Unicode なんぞ大嫌いだが、メリットの方が遥かに
大きいと思う。
> 漢字コードはあくまでも SJISしか認めないという前提の下で
これがそもそもナンセンスだということに、いい加減気が付くべき。
0316デフォルトの名無しさん
2005/08/12(金) 22:20:42OSの標準エンコーディング下で使い物にならない方がナンセンスだろ。
「日本語WindowsでPerlは使うべきでないのが標準」って立場で言うなら勝手だが、
いいのか? それで。
0317デフォルトの名無しさん
2005/08/12(金) 22:59:43PHPでも使ってろ
0318デフォルトの名無しさん
2005/08/12(金) 23:11:18死んでろ
0319デフォルトの名無しさん
2005/08/13(土) 00:02:040320デフォルトの名無しさん
2005/08/13(土) 00:43:01JISのどの規格でもないなぞのコードだからなあ。
0321デフォルトの名無しさん
2005/08/13(土) 15:05:05ファイルシステムとかはもう Unicode でやってるしな
そのうちメモ帳のデフォルトも UTF-8 になるんじゃないかね
好き嫌いはともかく、 Unicode 対応の必要性は増してきていると思うがね
0322デフォルトの名無しさん
2005/08/13(土) 16:14:370323デフォルトの名無しさん
2005/08/13(土) 21:24:49Perlにおいてサブルーチンのみを定義したファイルを.plで作成し、実質的な処理を行うファイルを.cgiで作成しています。
.plの中には現在10個程のサブルーチンが格納されています。
1個のサブルーチンの中にはおよそ100〜200行程度の処理を記述してあります。(コメントを含む。)
この場合、以下の条件ではどちらの方がより良い方法だと判断されるのでしょうか。
>この.plファイルをこのままにしてrequireする
>一つ一つのルーチンをそれぞれ別のファイルに分散させ、状況に応じてrequireさせる
どなたか回答宜しくお願い致します。
0324デフォルトの名無しさん
2005/08/13(土) 21:32:220325デフォルトの名無しさん
2005/08/14(日) 15:17:17それは条件ではなくて選択肢じゃね?
大抵の場合、複数選択肢がある場合には一長一短があったりすると思うんだけど。
例えば、実行時のメモリ効率、実行時間、保守性、簡単さ、etc.
で、どれをどれぐらい重要視するかってのが条件になるんじゃないか?
0326デフォルトの名無しさん
2005/08/14(日) 16:08:37@b=(1,2,3,4);
map {$tmp{$_}++} (@a,@b);
@intersect = grep {$h{$_}>1} keys %tmp;
積を求める部分、一行にしたくて悶々としてるんだけど、なんかない?
0327デフォルトの名無しさん
2005/08/14(日) 17:52:17一体何処で積を求めているのかが・・・「積を求める」でぐぐるとよいかも?
0328デフォルトの名無しさん
2005/08/14(日) 18:06:39普通、リストを持ってきて「積を求める」っつったら行列を思わせるので、
質問としてどうかと思うが。しかも %h なんてどこにもないし、
まぁいいや。2 つのリストで重複している要素を挙げろ、ということの
ようだけど、そのコードをそのまんま一行にするなら、こうかな。
@intersect = grep { ++$tmp{$_} > 1 } sort(@a, @b);
ただ、>>326 もこのコードも、@a や @b の中で重複要素があった場合
(ex. @a= (2, 3, 5, 5)) には誤った結果が返るのは分かってるよな?
0329デフォルトの名無しさん
2005/08/14(日) 18:07:18間違った。
map {$tmp{$_}++} (@a,@b);
@intersect = grep {$tmp{$_}>1} keys %tmp;
^^^^^
@aと@bの積集合を求めてるのです。
0330デフォルトの名無しさん
2005/08/14(日) 18:38:01sortいらない気がするけど、使うといいことあるの?
0331デフォルトの名無しさん
2005/08/14(日) 19:41:53これでよいなら。
my @intersect = (join(";", sort {$a <=> $b} (@a, @b)) =~/(?:(\d+)(?:;\1)+)/g);
0332323
2005/08/14(日) 19:44:37ああ、SelfLoaderがありましたね…すっかり忘れてましたorz
>>325
条件、じゃなくて選択肢 でした。すみません。
とりあえず私の方で重要視しているのは『保守性』と『実行時間の早さ』です。
分散させて状況により読み込ませた方が効率性は判りませんが時間短縮になるのかなぁと思ってるのですが、
Perlの中の人から見ればそれほど変化は無いのかな?
0333デフォルトの名無しさん
2005/08/14(日) 20:23:00> Perlの中の人から見ればそれほど変化は無いのかな?
ケースバイケース。測定すべし。
0334デフォルトの名無しさん
2005/08/14(日) 22:26:52あの、、、いつの時代でしょうか。
それくらいのコード量では、余程頻繁にそのcgiが叩かれない限り、
大した違いはありません。
保守性を取るなら、ファイルは別にしない方が良いでしょう
(もちろん中身によりけりですが)。
とすると SelfLoaderになります。
CPUが80MHz以下、メモリが32MB程度の時代なら、AutoLoader読み込み時に
スクリプトが遅くなるのを体感できました。
が、今は時代が違いますし、CGIなのでそれ以外の要素も多くなります。
気になるなら 333 の言うように測定を。
0336デフォルトの名無しさん
2005/08/16(火) 00:34:40ソケットをcloseする必要ありますか?
0337デフォルトの名無しさん
2005/08/16(火) 01:27:08rfc2616
0338デフォルトの名無しさん
2005/08/16(火) 01:38:44close() の時にエラーが発生するケースもあるので、close() して
返り値を確かめるのがベスト。
>>337
レイヤが違うし。その RFC 読んだって何も分からないよ?
0339デフォルトの名無しさん
2005/08/16(火) 01:57:440340デフォルトの名無しさん
2005/08/16(火) 03:39:380341デフォルトの名無しさん
2005/08/16(火) 13:12:37closeだので悩むよりLWPとか使った方がいいんじゃないかと。
0342デフォルトの名無しさん
2005/08/16(火) 15:48:15質問です。
LWPでドキュメントのボディーをリアルタイムで読み込む方法ありますか?
イメージとしては、こんな感じです。
my $fh = ...;
while(read($fh, ...)) {
...;
}
close($fh);
0343デフォルトの名無しさん
2005/08/16(火) 17:38:03content_cbでどうかな
0344デフォルトの名無しさん
2005/08/16(火) 17:52:220345デフォルトの名無しさん
2005/08/16(火) 21:05:220346デフォルトの名無しさん
2005/08/16(火) 23:07:37じゃあ今時は何がいいの?
0347デフォルトの名無しさん
2005/08/16(火) 23:38:090348デフォルトの名無しさん
2005/08/18(木) 06:57:06何か方法はないでしょうか≧ω≦
0349デフォルトの名無しさん
2005/08/18(木) 07:23:210350デフォルトの名無しさん
2005/08/18(木) 07:47:29サンクスです
のまイェイ☆
0351デフォルトの名無しさん
2005/08/18(木) 12:07:43m/[あ-お]/ で普通にマッチするから。
0352デフォルトの名無しさん
2005/08/18(木) 18:20:57edit->current file settingはutf-8にしてますー。
0353デフォルトの名無しさん
2005/08/18(木) 18:33:40ActivePerl の場合、use encoding を使ってると
デバッガ(-d)がクラッシュするんだな…orz
うちだけだろうか?
0354デフォルトの名無しさん
2005/08/18(木) 18:51:10ActivePerl 5.8.7使用。
0355デフォルトの名無しさん
2005/08/18(木) 22:36:01おまいだけ
0356デフォルトの名無しさん
2005/08/18(木) 22:43:29どれかのversionでこけて前スレあたりにActivestateにバグレポートを出したやつが
いたはず。
0357デフォルトの名無しさん
2005/08/19(金) 00:03:59自分でリメイクすればいいじゃん
0358デフォルトの名無しさん
2005/08/19(金) 00:06:39\x{}でコード直接埋め込んでもだめ?
0359デフォルトの名無しさん
2005/08/19(金) 00:34:52クズは黙ってろ。
0360デフォルトの名無しさん
2005/08/19(金) 00:35:530361デフォルトの名無しさん
2005/08/19(金) 00:45:55子プロセスから親プロセスに文字列を渡したいのですができますか?
できるのでしたら、方法を教えていただけるか、参考になるWebなどを
教えてください。
よろしくお願いします。
0362デフォルトの名無しさん
2005/08/19(金) 01:08:06つ perlipc.pod
0363デフォルトの名無しさん
2005/08/19(金) 01:42:45THX!
"perlipc.pod"をキーワードに調べてみます。
0364デフォルトの名無しさん
2005/08/19(金) 01:48:47(゚Д゚)ハァ?
0365デフォルトの名無しさん
2005/08/19(金) 01:55:38> man perlipc
とか
> perldoc perlipc
とかタイプしてみろ。
0366デフォルトの名無しさん
2005/08/20(土) 18:18:13Windows2K鯖SP4 IIS使用してます。
ActivePerl v5.8.7 built for MSWin32-x86-multi-thread
Excel 2002(10.6501.6626)SP3
WIN32::OLEを使用しまして、
PerlからExcelへのデータ出力をしようとしてます。
http://www.site-cooler.com/kwl/perl/ole.htm
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq12j.html
上記ページにてサンプルを動作させようとしたのですが、
「Win32::OLE(0.1701) error 0x80010105: "サーバーによって例外が返されました。"
in METHOD/PROPERTYGET "Open"」
このようにエラーが帰って来てしまい。
動作させることができません。
googleにて「excel WIN32 OLE」で検索しましたら、
Excel 97か、Excel 2000で動作ということが多く書かれておりました。
私のExcelのバージョンが原因ということでしょうか?
それともなにか別の問題が考えられるのでしょうか?
以上宜しくお願い致します。
0367デフォルトの名無しさん
2005/08/20(土) 19:29:180369デフォルトの名無しさん
2005/08/21(日) 00:25:350370デフォルトの名無しさん
2005/08/21(日) 01:18:240371デフォルトの名無しさん
2005/08/21(日) 06:12:47いろいろ調べていたのですが、簡単な方法が見つかりませんでした。
やっぱり、ループで回して突き合わせるしかないのでしょうか。
open(FILE,"sample1.txt");
@A = <FILE>;
close(FILE);
open(FILE,"sample2.txt");
@B = <FILE>;
close(FILE);
if( @A==@B ){ # ←この比較はできません
print "内容一致";
}else{
print "内容不一致";
}
:このファイル比較はあくまで用例で、
:目的はこのような配列の中身比較をしたいと思っています。
0372371
2005/08/21(日) 06:16:39という方法はありましたが、速度とメモリを浪費しそうで…
0373デフォルトの名無しさん
2005/08/21(日) 07:43:10ループ回すのが不満な理由に興味がわくけれども。
ループで良けりゃこんなんでどうかな?
sub cmparr (\@\@) {
my( $arref1, $arref2 ) = @_;
$_ ne shift @$arref2 and return 0 foreach @$arref1;
return 1;
}
0374デフォルトの名無しさん
2005/08/21(日) 07:55:43メモリはともかく、速度はそれが一番速そうだけどな。
0375デフォルトの名無しさん
2005/08/21(日) 08:24:480376デフォルトの名無しさん
2005/08/21(日) 11:01:54diffコマンドじゃだめ?
0377デフォルトの名無しさん
2005/08/21(日) 11:05:14diff コマンドのように色々オプションは付けられないようだけど。
0378371
2005/08/21(日) 16:01:29ありがとうございます。
>>373
なるほど、難しそうな…うぉなぜあんな所にandが!
と、コードを後ほどよく精読して参考にさせていただきます。
ループで回したくないわけでは無いのですが、も単に自分が
知らないだけのシンプルなステートメントがあったなら…
と思いまして。
>>374
そうですかぁ。文字列展開してるから遅いかなぁと思ったんですが。
小さい配列ならこれでいっかな。
>>375-376
了解です。今回は例が良くありませんでしたが、ファイル比較が
目的ではない為、また別のコーディングの際に参考にさせて頂きます。
(でもdiffは配列比較に転用できそうかな)
0379デフォルトの名無しさん
2005/08/21(日) 19:10:09文字列にすると
@a = ("",1,2,3);
@b = (" 1",2,3);
とかが同じとみなされる可能性がある。
grepとかmapとか使ったりして試してみたけどあんまり速度変わらん。
素直に>>373がシンプルで一番よさげ。
0380デフォルトの名無しさん
2005/08/21(日) 19:16:08それじゃ $arref2 の参照している配列の内容がなくなると思うが。
それでよければ良いのだが。
0381デフォルトの名無しさん
2005/08/21(日) 19:33:18@arr2 = qw/a b c d/;
で真が返る
0382デフォルトの名無しさん
2005/08/21(日) 20:30:48sub arraycmp (\@\@) {
my ($a1, $a2) = @_;
return 0 if ($#$a1 != $#$a2);
my $i;
$_ ne $a2[$i++] and return 0 foreach @$a1;
return 1;
}
0383デフォルトの名無しさん
2005/08/21(日) 20:32:48藻前等ホントに perldoc 嫌いだね。読んでみろって。
http://perldoc.com/perl5.8.4/pod/perlfaq4.html#How-do-I-test-whether-two-arrays-or-hashes-are-equal-
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_do_I_compute_the_difference_
0384デフォルトの名無しさん
2005/08/21(日) 20:40:08例えばコレとか。
ttp://search.cpan.org/~jkeenan/List-Compare-0.31/Compare.pm
0385デフォルトの名無しさん
2005/08/21(日) 23:18:320386デフォルトの名無しさん
2005/08/21(日) 23:32:130387デフォルトの名無しさん
2005/08/21(日) 23:34:370388デフォルトの名無しさん
2005/08/21(日) 23:35:240389デフォルトの名無しさん
2005/08/21(日) 23:39:31385でも386でも無いが、
棒が傾いて行ってたので( "|" → "/")、一個加えてみたかった。
0390デフォルトの名無しさん
2005/08/21(日) 23:46:21% sample.pl -a hogehoge -a fugafuga
としておいて、-a で指定した hogehoge と fugafuga を
一つの配列に入れたいです。
for 文で shift していけばなんとかできそうなのですが、
Getopt::Std では、そんなことできないですか?
0391デフォルトの名無しさん
2005/08/22(月) 00:18:28そもそも、そういう syntax はよろしくないと思うんだが。
0392デフォルトの名無しさん
2005/08/22(月) 00:21:19-a "foo,bar" みたいな感じでパラメータ渡して、
内部でsplitさせるとかどうなの?
いや、俺はWeb上で動くPerlしか作らないんで実際にそういう風に処理出来るのか知らないんだけどさ
0393デフォルトの名無しさん
2005/08/22(月) 00:23:55Getopt/Std.pmを眺めてみると、オプションをキーにしたハッシュを作って
いるみたいなので、同じオプションがあると上書きされるようです。
それと、オプションの使い方としては>>391さんの言うとおりかと思います。
0394373
2005/08/22(月) 01:21:06あんがと。穴まみれだった。orz
もう話題シフトしてるけど個人的にキモチワルイんで書き直し。
sub arraycmp (\@@) {
my( $arref, @arrey ) = @_;
return 0 if @$arref != @arrey;
foreach ( 0 .. @$arref - 1 ) {
unless (defined $arref->[$_]) {
defined $arrey[$_] ? return 0 : next;
}
return 0 if $arref->[$_] ne $arrey[$_];
}
1;
}
0395デフォルトの名無しさん
2005/08/22(月) 01:32:30わざわざ配列に代入しなくても、$/をundefにして$hogeに全部流し込めってことだろう。
それでeqで比較、と。
0396デフォルトの名無しさん
2005/08/22(月) 19:27:03>>367の[Spreadsheet::WriteExcel] って書くだけですよね。
こっちはテンプレートがあってそこに入れ込む形で利用したいんだけど、
同じようにOLEがうまく使えなくて困ってるんだけど・・・
0397デフォルトの名無しさん
2005/08/22(月) 20:59:13いや、、、>>386で言いたいことは分かったが、
>>371
>:目的はこのような配列の中身比較をしたいと思っています。
って書いてあるんだからさ。
0398デフォルトの名無しさん
2005/08/22(月) 21:52:05それだと2番目の配列の要素がパラメータスタックにどかっと積まれてすごくイヤじゃないか?
両方リファレンスにすべきだと思われ。
0399デフォルトの名無しさん
2005/08/22(月) 22:04:01選べ。
1. Spreadsheet::ParseExcel がテンプレートに対応してることに期待する
2. Excel::Template で自前でテンプレートを作る
3. Excel を捨てる
0400デフォルトの名無しさん
2005/08/22(月) 23:02:40tkでmainloopがはしったあとに、別の動作中の処理を監視したり、通知してもらって
mainloopがはしっているウィジェットにその状態を反映させるようなものを作ろうと
おもっているのですが、とりあえずそれを実現する手段としてプロセス間通信もしくは
スレッドしか思いつきません。
tkでその代わりになるようなものは容易されていないのでしょうか?
0401デフォルトの名無しさん
2005/08/22(月) 23:59:120402373
2005/08/23(火) 00:00:21>それだと2番目の配列の要素がパラメータスタックにどかっと積まれてすごくイヤじゃないか?
>両方リファレンスにすべきだと思われ。
全面的に同意。
リストを渡せると便利かな程度の考えだったんだけども、言われてみれば確かにコピーすんのはアホっぽいね。
というわけで再々修正版。
sub arraycmp (\@@) {
my $arref = shift;
return 0 if @$arref != @_;
foreach ( 0 .. @$arref - 1 ) {
defined $_[$_] ? return 0 : next unless defined $arref->[$_];
return 0 if $arref->[$_] ne $_[$_];
}
1;
}
# ほとんど自分用のメモと化してる…。みんなごめんよ。
0403デフォルトの名無しさん
2005/08/23(火) 00:25:560404デフォルトの名無しさん
2005/08/23(火) 00:36:55学ぶところがあるネタならメモでも結構だが、配列の比較なんて散々既出。
ヨソでやってよ。
0405デフォルトの名無しさん
2005/08/23(火) 00:46:10やっぱりああいうオプションの使い方は変ですよね…。
データファイル
name,ORE,OMAE,DARE
aaa,*,*,*
bbbbb,,*,
cccc,*,,*
% ./sample.pll -t ORE -t OMAE
ORE
| OMAE
| |
aaa * *
bbbbb *
cccc *
% ./sample.pll -n aaa -n bbbbb
ORE
| OMAE
| | DARE
| | |
aaa * * *
bbbbb *
こういうのが欲しかったんです。
XYの項目の両方をターゲットに絞り込みたいとき、
どうするのがスマートなんでしょうか…。
0406デフォルトの名無しさん
2005/08/23(火) 01:01:470407デフォルトの名無しさん
2005/08/23(火) 01:13:27>>392
$ ./sample.pl -t 'ORE,OMAE'
$ ./sample.pl -n 'aaa,bbbb'
cut の -f なんかで使われてる、割とスタンダードな方法だ。
$ cat list
a:123:foo
b:456:bar
c:789:baz
$ cut -d: -f1,3
a:foo
b:bar
c:baz
0408デフォルトの名無しさん
2005/08/23(火) 01:43:04>>407 ありがとです。これならXY両方同時のフォーカスもできそうですね。
0409デフォルトの名無しさん
2005/08/23(火) 12:14:07↓
http://aaa.bbb.ccc.jp/
にperlで変換したいんですが、どうすればできますか?
0410激マジ
2005/08/23(火) 12:21:24if( $a eq 'http://aaa-bbb-ccc.ddd.jp/' ){
$a = 'http://aaa.bbb.ccc.jp/';
}
0411デフォルトの名無しさん
2005/08/23(火) 12:26:51早速、ありがとうございます。
すみません、aaa-bbb-cccの部分がいろいろ変化するので、
aaa-bbb-cccの部分を取り出して変更を行いたいのですが・・・
(例)
http://zzz-yyy-xxx.ddd.jp/
↓
http://zzz.yyy.xxx.jp/
などです。
0412デフォルトの名無しさん
2005/08/23(火) 12:33:59dddの方は変わらないのか?
「aaa-bbb-ccc」と「ddd」 の分割の条件・パターン・ルールは何なんだ?
例えば、最も左側にある「.」で分割とか、それなりに一般的な説明を書いてもらえないと
使い回しの効く一般的な回答は得られませんよ。
0413デフォルトの名無しさん
2005/08/23(火) 12:39:42$url =~ s{(?<=://)(\w+(?:-\w+)*)\.\w+} {
my $host = $1;
$host =~ tr/-/./;
$host;
}e;
0414411
2005/08/23(火) 12:39:48説明不足ですみません。
ddd.jpのほうは変わりません。
つまり頭のサブドメイン部分のみ変化します。
ですので、おっしゃるとおり「最も左側にある「.」で分割」
になります。
「ハイフン」の部分を「ドット」に変換して置き換えたい
と思っています。
0415デフォルトの名無しさん
2005/08/23(火) 15:50:22やりたいことだけをきちんと書け。
$url =~ s/-/./g;
こういうことか?
0418デフォルトの名無しさん
2005/08/23(火) 15:59:22それはOLEが俺には使えないってこと?
それとも・・・OLE使っての処理が一般的じゃないってこと?
OLE使ってのEXCEL操作はあきらめろってことか・・・・orz
0419411
2005/08/23(火) 17:43:00まだきちんと動いていませんが、ありがとうございます。
シェル・スクリプトとかは大丈夫なんですが、
perlはさっぱりですみません。
squidのredirect_programにかませようとしてます。
0420デフォルトの名無しさん
2005/08/23(火) 18:02:46単なる正規表現の範疇だぞ。
sedも使えないのはわかってるから体裁繕わなくていいよ。
0421デフォルトの名無しさん
2005/08/23(火) 18:52:07ゃさすぃ
0422399
2005/08/23(火) 19:28:22Perl + OLE でトラブってるのに、なんで Perl でやりたがるのか理解に苦しむ。
VB でサクっと書けるだろ。プログラミングは手段だ。手段と目的を履き違えて
ないか?
0423デフォルトの名無しさん
2005/08/23(火) 22:17:19======================================================
HIT000000002.2
Cellular 0005222
Cellular 0005222
======================================================
HIT000000003.2
Cellular 0005634
Cellular 0005634
Cellular 0003232
Cellular 0005634
Cellular 0005634
Cellular 0005634
Cellular 0005634
Cellular 0003232
Cellular 0005634
Cellular 0003232
Cellular 0005634
...続く
というファイルに対して、
出力
HIT000000002.2 0005222
HIT000000003.2 0005634
HIT000000003.2 0003232
...続く
のように、=================で区切られた中で、Cellular のないもの(一行目のように)は無視し、同じ数字は一つにまとめて、HIT...を見出しにして表示するには、どうしたらいいのでしょうか?
0424デフォルトの名無しさん
2005/08/23(火) 22:44:27宿題、仕事はヨソでやってよ。
0425デフォルトの名無しさん
2005/08/23(火) 22:52:25適切な解答だ。
0426デフォルトの名無しさん
2005/08/23(火) 23:18:00とすると . が改行にマッチしますよね
/[^a]/s
とした場合にも改行にマッチしますか?
0427デフォルトの名無しさん
2005/08/23(火) 23:24:11自分で試すことが出来ないの?
0428デフォルトの名無しさん
2005/08/23(火) 23:25:29自分で試せば良いのでは…。ワンライナーか何かで。
答えはyes。
だって、[^a] でしょ? /s オプションが無くてもマッチするよ。
0429デフォルトの名無しさん
2005/08/23(火) 23:27:26できないから聞いてんでしょ
0430デフォルトの名無しさん
2005/08/23(火) 23:32:52じゃあ、Yes と No の両方の回答があったらどうするんだよ?
0431423
2005/08/23(火) 23:53:01できればどなたか教えてください。よろしくお願いします。
0432デフォルトの名無しさん
2005/08/24(水) 00:12:41一式、本買って通読しなよ。
あんた、以前も何度か似たようなことここで聞いてるだろ。
ちっとも進歩してないじゃないか。
0433デフォルトの名無しさん
2005/08/24(水) 00:16:32ヒントだけ。
HITで HITの文字列を記憶。
Cellular の値をハッシュに記憶。
= が出たら、HIT-Cellularの値を表示して、ハッシュをクリア。
これを while で回すんだけど
最期に = の行が無いとハッシュに入ったままのものが残るので、、、
あとは自分で考えようネ。
0434デフォルトの名無しさん
2005/08/24(水) 00:24:08while(1){}
だって何もせず回ってりゃ問題なんて起きない。
0435デフォルトの名無しさん
2005/08/24(水) 00:28:30「プログラムとまらないんですけど…」という質問が来る問題発生。
0436デフォルトの名無しさん
2005/08/24(水) 01:22:02グーグルで検索した限り。
う〜〜ん・・
0437デフォルトの名無しさん
2005/08/24(水) 01:49:56つppm
見当違いだったらスマソ
0438423
2005/08/24(水) 09:54:22ヒントをありがとうございます。でもまだうまくできません。
open(FILE,$ARGV[0]) ||die "Cannot open \"$ARGV[0]\": $!\n";
%hash;
while(<FILE>) {
chomp;
if($_=~ /^HIT/){
$hit=$_;
}
if($_=~ /Cellular (\d+)/){
$count{$hit}=$1;
}
if($_=~ /^=/){
if(defined($count{$hit})){
print "$hit $count{$hit}\n";
$count{$hit}="";
}
}
}
close FILE;
でやると、
HIT000000002.2 0005222
HIT000000003.2 0005634
となってしまいます。
答えを
HIT000000002.2 0005222
HIT000000003.2 0005634
HIT000000003.2 0003232
とするにはどのように直せばよいのでしょうか?
どなたか教えてください。
0439デフォルトの名無しさん
2005/08/24(水) 10:48:19惜しいな。ハッシュが更にハッシュを参照するように代入する所は
こんな風にすれば良いんじゃないだろうか。
if ($_=~ /Cellular (\d+)/){
$count{$hit}->{$1} = 1;
}
で、こんな風に出力する。(sortしたい場合は keys の直前に sort を入れるなどする)。
for my $h (keys %count) {
for my $c (keys %{$count{$h}}) {
print "$h $c\n";
}
}
0440423
2005/08/24(水) 12:38:46できました!
本当にありがとうございます。
0441418
2005/08/24(水) 16:46:10結局はVBでサクッと書いたんだけれども、
やはりメンテナンスや変更等の際にVBを触るより<これもVBでの作成の仕方ひとつで違うが・・・
perlで変更できる方が利便性が高く良いと思って
Perl+OLEに執着してるし、Perl+OLEができないからって
VBに逃げたく無いって部分もあるんだよ。
まぁ折れはVB書けたから良いけど
書けないヤツはどうすれば良いんだ?とも思うのだけど。
0442デフォルトの名無しさん
2005/08/24(水) 17:21:27そんなに執着するんならバグレポートでも送れば?
オタクの事情なんか知ったこっちゃないよ。
0443デフォルトの名無しさん
2005/08/24(水) 19:55:33いちいち改造したりするのにコンパイルするのは確かに面倒だろうな。
ただ、逃げ先があるならおとなしく逃げという選択肢に甘えるのも手だよ
0444デフォルトの名無しさん
2005/08/24(水) 20:18:27初心者ですが質問です。
perlで1京以上の数を扱うにはどうしたらいいんでしょうか?
どなたか教えてください。
京を超えるとベキ数になっちゃうので。。。
0445デフォルトの名無しさん
2005/08/24(水) 20:29:32多倍長整数で調べてみれ
…携帯からなんで調べれません…(T-T)
0447デフォルトの名無しさん
2005/08/24(水) 20:46:480448デフォルトの名無しさん
2005/08/24(水) 20:46:53ネット環境を整えるか、ネットカフェなどで調べて下さい
0449デフォルトの名無しさん
2005/08/24(水) 21:23:410450デフォルトの名無しさん
2005/08/24(水) 21:29:19use integerしておいたほうがCPUに優しかったりするのかしら
0451デフォルトの名無しさん
2005/08/24(水) 21:31:53スクリプトにもよるけど、たぶん大して変らない
0452デフォルトの名無しさん
2005/08/24(水) 22:05:57yahooじゃ駄目なのかしらん?
0453デフォルトの名無しさん
2005/08/24(水) 22:19:36検索性能が段違いだから。
あと、Yahoo!は検索サイトではなくポータルサイトなので、
ページを開いた時にいろんな無関係の情報がグチャグチャ出て
重くてウザい、といった理由もある。
0454デフォルトの名無しさん
2005/08/24(水) 22:21:29そうっすよ。
MS-DOSで使ってた時はコプロが使われる数少ないソフトの1つだった(w
(あとは1-2-3も使ってたっけ?)
iperl.exeとか使ってたけどね……。
>>451
そう?と思ったけど、確かに数値演算してる部分が少なければ変わんないか。
気になるならBenchmarkしよー >>450
0455デフォルトの名無しさん
2005/08/24(水) 22:52:01>検索性能が段違いだから。
ソースは?
0456デフォルトの名無しさん
2005/08/24(水) 22:57:44というか、そもそもスレ違いの質問だと思うぞ
0457デフォルトの名無しさん
2005/08/24(水) 22:59:08ま た ソ ー ス 厨 か
訳も分からんくせに一人前の口きくんじゃねえよ。
お前は一人寂しくソースカツ丼でも食っとけ。
0458デフォルトの名無しさん
2005/08/24(水) 22:59:54ソース の検索結果 約 3,150,000 件中 1 - 10 件目 (0.08 秒)
http://www.google.co.jp/search?hl=ja&q=%E3%82%BD%E3%83%BC%E3%82%B9&lr=
yahoo
ソースで検索した結果 カテゴリ:101件 登録サイト:579件
http://search.yahoo.co.jp/bin/search?p=%A5%BD%A1%BC%A5%B9&fr=top&src=top
0459デフォルトの名無しさん
2005/08/24(水) 23:00:46そんなことするより手前のスパゲッティーソースをなんとかしろよ
と言われた
0460デフォルトの名無しさん
2005/08/24(水) 23:01:49確かに今のCPUなら浮動小数点計算だろうと普通のPerlスクリプトで使う計算程度の
計算量では大差ないかもしれませんね
>>454
MS-DOS時代って・・・大ベテランの方ですな( ´д`;)
いや話がずれてました失礼
適当にベンチマークとって見ました所、私のPC(Athlon 1.0GHz)では、
use integerした場合、単純なインクリメント処理で約2.5倍のパフォーマンスという結果になりました。
> perl -MBenchmark -e "$c=0; timethis(10000000, sub{ $c++; });"
timethis 10000000: 3 wallclock secs ( 2.08 usr + -0.00 sys = 2.08 CPU) @ 4800768.12/s (n=10000000)
> perl -Minteger -MBenchmark -e "$c=0; timethis(10000000, sub{ $c++; });"
timethis 10000000: 2 wallclock secs ( 0.82 usr + 0.01 sys = 0.83 CPU) @ 12033694.34/s (n=10000000)
おまけ やっぱり多倍長整数演算は重いな・・・
> perl -MMath::BigInt=:constant -MBenchmark -e "$c=0; timethis(100000, sub{ $c++; });"
timethis 100000: 14 wallclock secs ( 9.61 usr + 0.02 sys = 9.63 CPU) @ 0.00/s (n=100000)
# 初め、integerとMath::BigInt=:constantを間違えて、逆に重くなった!?と思っていたのは秘密
0461デフォルトの名無しさん
2005/08/24(水) 23:03:59Yahooはこっちだろうと。
ソースで検索した結果 ページ:約41000000件
http://search.yahoo.co.jp/bin/query?p=%a5%bd%a1%bc%a5%b9&fr=top&h=p
0462デフォルトの名無しさん
2005/08/24(水) 23:06:100463デフォルトの名無しさん
2005/08/24(水) 23:10:28最近は独自のを使ってる
ttp://www.itmedia.co.jp/news/articles/0405/31/news007.html
YahooがGoogleの拾ってないページを持ってたりすることも結構あるから、
場合によっては両方で検索したりすることもある漏れGoogle信者
0464デフォルトの名無しさん
2005/08/24(水) 23:14:260465デフォルトの名無しさん
2005/08/24(水) 23:22:090466デフォルトの名無しさん
2005/08/24(水) 23:36:48だったら、yahooでもよくね?
0467デフォルトの名無しさん
2005/08/25(木) 00:02:170468デフォルトの名無しさん
2005/08/25(木) 00:10:135.8系ならbigintプラグマなんてのもあったのか
0469デフォルトの名無しさん
2005/08/25(木) 00:49:52Bの行の単語がAのどこかの行にあったら
その行を出力させたいんだけど。
open(FILE1,$ARGV[0]);
open(FILE2,$ARGV[1]);
while(FILE1){
$hoge=$__;
while(FILE2){
$pattern=$_;
if($hoge =~ /$pattern/){
print "$hoge \n";
}
}
}
0470デフォルトの名無しさん
2005/08/25(木) 00:59:02@f1 = <FILE1>;
close(FILE1);
open(FILE2,$ARGV[1]);
@f2 = <FILE2>;
close(FILE2);
foreach(@f1)
{
$i=$_;
foreach(@f2)
{
if($_ =~ /$i/)
{
print "$_\n";
}
}
}
こんなんどう?FILE1の存在行の分だけFILE2でまわすから効率悪いんだが
0471デフォルトの名無しさん
2005/08/25(木) 01:01:040472デフォルトの名無しさん
2005/08/25(木) 01:07:08先にパターン一覧を読み込んでおいてそれぞれの行で回すのが一番手っ取り早いかな
こんな感じでどうだろ
my @patterns = ();
open(IN, $ARGV[1]);
while (<IN>) { chomp; push(@patterns, $_); }
close(IN);
open(IN,$ARGV[0]);
while(<IN>){ my $line=$_;
foreach my $pattern (@patterns) {
print $line if $line =~ /$pattern/;
}
}
close(IN);
0473472
2005/08/25(木) 01:08:300474デフォルトの名無しさん
2005/08/25(木) 01:52:060475デフォルトの名無しさん
2005/08/25(木) 02:00:14せっかくだから、最初に1つの正規表現に加工する場合の例を書き捨て。
open(FILE1,"<$ARGV[0]");
open(FILE2,"<$ARGV[1]");
my $ptn;
while(<FILE2>) {
chomp;
$_ = quotemeta($_);
$_ = join($_,'\b','\b') if m/^\w+$/;
$ptn .= join($_,'(',')|');
}
substr($ptn,-1) = '';
close(FILE2);
eval("m/$ptn/ && print while <FILE1>");
close(FILE1);
0476デフォルトの名無しさん
2005/08/25(木) 03:17:41俺は盆休みに東京から福井県にあるヨーロッパ軒までソースカツ丼食べに行った。
マジで美味かったよ。
0477デフォルトの名無しさん
2005/08/25(木) 13:01:14くだんない話引っぱるなよ、夏厨。
0478デフォルトの名無しさん
2005/08/25(木) 14:40:21ごめんな。
0479デフォルトの名無しさん
2005/08/25(木) 19:28:11みなさんなら、どんな構成になるでしょうか。理由込みで。
0480デフォルトの名無しさん
2005/08/25(木) 19:51:52幾つかも何も、現実的には ActivePerl 一択だが。
RAD ツールをお探しなら以下へ。
Perl書くのにどんなエディタ使ってる?
http://pc8.2ch.net/test/read.cgi/php/1014357485/
0481デフォルトの名無しさん
2005/08/25(木) 21:24:380482デフォルトの名無しさん
2005/08/25(木) 22:22:04http://hoge.com/のリンクを<a href="http://hoge.com/">http://hoge.com/</a>に置き換えることは出来たんですが
再編集すると、またhttp://に反応してしまって、リンクタグが変になってしまいます。
どうゆう風にすればいいでしょうか?スマートな方法とか、正規表現の例などをお願いします。
0483デフォルトの名無しさん
2005/08/25(木) 22:29:540484デフォルトの名無しさん
2005/08/25(木) 22:43:04terapad
0485デフォルトの名無しさん
2005/08/25(木) 22:46:17oedit
0486デフォルトの名無しさん
2005/08/25(木) 23:13:27説明不足ですみませんでした。<a href="http://">リンク</a>みたいなこともやるので、
タグにかこわれていない時だけリンクをしたいんです。
0487デフォルトの名無しさん
2005/08/25(木) 23:15:40ttp://www.din.or.jp/~ohzaki/perl.htm#AutoLink
タグで囲われてない のが条件ならこの辺どう?
0488デフォルトの名無しさん
2005/08/26(金) 00:11:54ってダブルクォーテション、改行(0X0A)以外のキャラクタという意味で
良いんですか?
0489デフォルトの名無しさん
2005/08/26(金) 01:11:19なんだか難しくてよくわからないので自分で書いてみたけど、$1がすごく変です・・・上手くはいったから良いでしょうか??
$value =~ s/http:\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"http:\/\/$1\">http:\/\/$1<\/a>/g;
この拾った正規表現を以下のように変更しました
$value =~ s/([^"'=><])(http|https|ftp):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/\1<a href=\"\2:\/\/$3\">\2:\/\/$3<\/a>/g;
0490デフォルトの名無しさん
2005/08/26(金) 01:47:460491デフォルトの名無しさん
2005/08/26(金) 01:53:000492デフォルトの名無しさん
2005/08/26(金) 01:55:320493デフォルトの名無しさん
2005/08/26(金) 01:57:070494デフォルトの名無しさん
2005/08/26(金) 01:59:46なんだかんだ言ってもこのスレの回答者はいい奴ばかりなんだよ。
ソースカツ丼でも食べて落ち着いてくれよ。
0495489
2005/08/26(金) 02:14:26どうしたらいいでしょうか
0496ヽ(´ー`)ノ ◆.ogCuANUcE
2005/08/26(金) 02:46:13Regexp::Common 使った方が良いかと。
use Regexp::Common qw/URI/;
our $URI_RE = qr/
$RE{URI}{HTTP}
| $RE{URI}{HTTP}{'-scheme' => 'https'}
| $RE{URI}{FTP}
/x;
our $HREF_ATTR_RE = qr/
href
| action
| src
/ix;
s@(^|(?:$HREF_ATTR_RE)[^='"])($URI_RE)@$1<a href="$2">$2</a>@g;
とりあえず、こんなもんですか。
0497デフォルトの名無しさん
2005/08/26(金) 03:56:05拡張構文が使えるなら (?<!["'<=>]) でいけると思う。
それよりも、そもそもの設計をやり直した方がいいぞ。
例えば http://aaa/bbb?https://ccc/ddd?ftp://eee#fff みたいな
URI があるとおかしなことになる。RFC 3986 的にはおそらく valid。
0498ヽ(´ー`)ノ ◆.ogCuANUcE
2005/08/26(金) 04:55:40$HREF_ATTR_RE いらんね。
use Regexp::Common qw/URI/;
our $URI_RE = qr/
$RE{URI}{HTTP}
| $RE{URI}{HTTP}{'-scheme' => 'https'}
| $RE{URI}{FTP}
/x;
s@(^|[^='"])($URI_RE)@$1<a href="$2">$2</a>@g;
>>497
別におかしくならない。
例えば http://aaa/bbb?https://ccc/ddd?ftp://eee#fff みたいな
例えば <a href="http://aaa/bbb?https://ccc/ddd?ftp://eee">http://aaa/bbb?https://ccc/ddd?ftp://eee</a>#fff みたいな
$RE{URI}{HTTP} が fragment を処理しないから、そこで切れちゃうけど。
設計の是非はともかく、やっつけ仕事でこういうのやりたくなる時って
あると思うけど。
0499489
2005/08/26(金) 18:35:23497さんの方法で出来ました。ただそうゆうURLが出ると再編集のときにおかしくなりますね。
もうちょっと正規表現について勉強しようと思います。
0500デフォルトの名無しさん
2005/08/26(金) 22:00:360501デフォルトの名無しさん
2005/08/26(金) 22:01:440502デフォルトの名無しさん
2005/08/26(金) 22:06:190503デフォルトの名無しさん
2005/08/26(金) 22:07:08たくさん、ありますね・・
0504デフォルトの名無しさん
2005/08/26(金) 22:10:40これ最近出た奴だけど評判良いみたいだから勧めとく
0505デフォルトの名無しさん
2005/08/26(金) 22:30:480506デフォルトの名無しさん
2005/08/26(金) 22:43:010507デフォルトの名無しさん
2005/08/26(金) 23:11:42Encode.pmの作者がレビューしてるなw ここも見てるのかな。
0508デフォルトの名無しさん
2005/08/26(金) 23:14:58Tkとか
GUI::Loftとか
で、PARでexeにするとか?
0509デフォルトの名無しさん
2005/08/26(金) 23:17:190510デフォルトの名無しさん
2005/08/26(金) 23:21:07弾氏が評価してるようですね。
邦訳はいつ頃になるんだろう・・
はてなの人が翻訳した本が今度出るらしいですね。
方向としては>504と近いのでしょうか?
Effective Perl 、Perl CookBookってどうですか?
0511デフォルトの名無しさん
2005/08/27(土) 01:30:04両方ともオススメ。
クックブックは原著買っても良いかも。この手の本は分冊されてると
ちょっと使いにくいんじゃないかなと思うんで。安く済むし。
0512デフォルトの名無しさん
2005/08/27(土) 11:48:182進法から10進法、10進法から2進法に変換するには、どの様に記述すれば良いのでしょうか?
Perl云々以前の話だと思うのですが・・・
0513デフォルトの名無しさん
2005/08/27(土) 11:55:520514デフォルトの名無しさん
2005/08/27(土) 12:00:34具体的には上記の様な20項目程のスイッチがありまして、
それを10進法に置き換えてファイルに格納したいのです。
そのままcsv形式で格納しても良いのですが、スイッチを随時増やす予定なので。
圧縮が目的ですので8進法でも16進法でも問題ありません。
途中で送信してしまいました。
>>513
無い訳がないですよね・・・もう一度ググってきます。
0515デフォルトの名無しさん
2005/08/27(土) 12:24:12Perl以前どころか、10進法、2進法以前の話。
0516デフォルトの名無しさん
2005/08/27(土) 12:55:38packのb/Bかvecあたりを勉強するのがいいんじゃないかと。
0517デフォルトの名無しさん
2005/08/27(土) 13:54:3264進数へ変換すれば、速度落とさずに効果出ますよ
0518デフォルトの名無しさん
2005/08/27(土) 14:00:550519514
2005/08/27(土) 14:24:54packとunpackの使い方で、進数の変換が出来るのですね。
ヒントをありがとうございました。勉強してみます。
>>517
そのものズバリのモジュールがあったのですか。検索が全然足りませんでした。
速度が気になりますが、取り敢えずは関数で処理してみたいと思います。ありがとうございました。
0520デフォルトの名無しさん
2005/08/27(土) 14:25:20直接可読である必要があるのだろうか。
0521デフォルトの名無しさん
2005/08/27(土) 14:40:51進数がどうこういうのが直接の目的じゃなくて1と0だけのデータ
を効率よく少ない記憶領域に詰めこみたいというのが本来の目的
みたいだから、perlならpack使うのが自然じゃないかな。
0522デフォルトの名無しさん
2005/08/27(土) 15:08:160523デフォルトの名無しさん
2005/08/27(土) 15:15:450524デフォルトの名無しさん
2005/08/27(土) 16:19:050525デフォルトの名無しさん
2005/08/27(土) 16:43:49hoge.plをダブルクリックするとコマンドプロンプトが出るのですが
必要ないので出ないようにするにはどうすればいいの?
0526デフォルトの名無しさん
2005/08/27(土) 16:45:130527デフォルトの名無しさん
2005/08/27(土) 17:56:56>>58>>60>>61
0528デフォルトの名無しさん
2005/08/27(土) 20:42:38-e $File
が偽を返すようです。
対処法をご存知の方、よろしくお願いします。
$FileはTkのgetSaveFile()の返却値が入っています.
0529時間があったらでいいわよっ、あ、でも来て欲しいな
2005/08/27(土) 20:43:17いまVIPが、世界が認めてない東海って名前を、
日本海に直してもらう作戦を行ってるのは、当然知ってるわよね?
VIPPERの力で、Googleが東海の単独表記を取り下げたのは有名ね。
でも、いまVIPは大きな問題を抱えてる。
ITスキル、特に鯖関係のものが、圧倒的に足りないのよ。
それでなんだけど・・・んちょっと、、、VIPに協力してほしいのよね。
べ、べつにあんただったから頼みに来たわけじゃないわよ!勘違いしないでよね!
でも、あなたの力があれば、日本海を取り戻すのが近くなるのは・・・確かだわ。
もし・・・協力してくれるんなら、このスレに書き込んでほしい。
http://ex11.2ch.net/test/read.cgi/news4vip/1125074145/
・・・・やっぱり、あなたに協力して・・・ほしいから。
0530デフォルトの名無しさん
2005/08/27(土) 21:22:222バイト文字って、何? シフトJISのこと?
0531デフォルトの名無しさん
2005/08/27(土) 22:01:58処理結果はファイル経由でやりとり。
0532デフォルトの名無しさん
2005/08/27(土) 22:28:410533デフォルトの名無しさん
2005/08/28(日) 00:28:360534デフォルトの名無しさん
2005/08/28(日) 01:13:09ハッシュやXMLの形式を取るデータをJSONの形式に変換するモジュールを使うと楽ですよ。
0535デフォルトの名無しさん
2005/08/28(日) 02:35:53数百行程度の小さなプログラムなら地道にprintできるけど
デカイものだとさすがにしんどい
0536デフォルトの名無しさん
2005/08/28(日) 02:46:36デバッガを使うといいですよ、っていうか。
小さな単位に分割して個別に攻めましょうよ。
0537デフォルトの名無しさん
2005/08/28(日) 03:19:01てかなんですかそれ
0538デフォルトの名無しさん
2005/08/28(日) 03:27:33なんだろう? 支援を中止すること? 推薦を取り消すこと?
de-buck? ドルをドル以外に変えること?
0539デフォルトの名無しさん
2005/08/28(日) 03:54:410540デフォルトの名無しさん
2005/08/28(日) 04:34:58優秀なプログラマですね
0541デフォルトの名無しさん
2005/08/28(日) 06:40:47ネタにマジレスカコワルイが…
× デバック
○ デバッグ
0542デフォルトの名無しさん
2005/08/28(日) 07:03:58で下記が出力され、hoe.exeができません。
どうやってつくるの?
Note (probably harmless): No library found for oldnames.lib
Note (probably harmless): No library found for kernel32.lib
Note (probably harmless): No library found for user32.lib
Note (probably harmless): No library found for gdi32.lib
Note (probably harmless): No library found for winspool.lib
Note (probably harmless): No library found for comdlg32.lib
Note (probably harmless): No library found for advapi32.lib
Note (probably harmless): No library found for shell32.lib
Note (probably harmless): No library found for ole32.lib
Note (probably harmless): No library found for oleaut32.lib
Note (probably harmless): No library found for netapi32.lib
Note (probably harmless): No library found for uuid.lib
Note (probably harmless): No library found for ws2_32.lib
Note (probably harmless): No library found for mpr.lib
Note (probably harmless): No library found for winmm.lib
Note (probably harmless): No library found for version.lib
Note (probably harmless): No library found for odbc32.lib
Note (probably harmless): No library found for odbccp32.lib
Note (probably harmless): No library found for msvcrt.lib
0543デフォルトの名無しさん
2005/08/28(日) 07:08:300544デフォルトの名無しさん
2005/08/28(日) 07:16:460545デフォルトの名無しさん
2005/08/28(日) 12:35:170546デフォルトの名無しさん
2005/08/28(日) 13:31:23PARとか使ったら?
0547デフォルトの名無しさん
2005/08/28(日) 14:57:53パソヲタから見ると明確で分かりやすいかもしれませんが
フツーの人から見ると全く不明瞭で分かりづらいです.
0548デフォルトの名無しさん
2005/08/28(日) 15:04:250549デフォルトの名無しさん
2005/08/28(日) 15:25:15はいはい
0550デフォルトの名無しさん
2005/08/28(日) 15:32:04パソヲタが見てもさっぱりわかりません
ふつうの人が見てもさっぱりわかりません
多少プログラムをかじった人が見れば大体理解できる
プログラムで飯食ってる俺が見たら解決法まで瞬時に思いつく
0551デフォルトの名無しさん
2005/08/28(日) 15:36:220552デフォルトの名無しさん
2005/08/28(日) 15:39:060553デフォルトの名無しさん
2005/08/28(日) 15:39:510554デフォルトの名無しさん
2005/08/28(日) 15:45:34オプションでライブラリを指定しろってことだ
0555デフォルトの名無しさん
2005/08/28(日) 16:10:440556デフォルトの名無しさん
2005/08/28(日) 16:44:58言うは易し
自分でやってみればわかるよ
0557デフォルトの名無しさん
2005/08/28(日) 17:00:410558デフォルトの名無しさん
2005/08/28(日) 18:37:500559デフォルトの名無しさん
2005/08/28(日) 23:29:20話がありましたが、やはりバグだそうです。
詳しい話を聞く時間はなかったのですが、グローバル変数が悪さしている
とか。5.10.xでなおるといいねえ。とのこと。
0560デフォルトの名無しさん
2005/08/29(月) 00:19:30言うはやすしって言うか
あんたライブラリがどのディレクトリにあるかわかってる?
そもそもライブラリって何かわかってる?
わかってるんなら perlcc -L /dir ***.pl でディレクトリ指定してやれば通るし
ていうかコンフィグファイルにフルパスで設定しとけばオプションなしでもいけるし
わかってないんならCとかコンパイルが必要な言語を基礎から勉強汁
0561560
2005/08/29(月) 00:20:090562デフォルトの名無しさん
2005/08/29(月) 00:23:54perlcc -L /"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib" aaa.pl
こうやってもだめだったが・・・
0563560
2005/08/29(月) 00:29:35そこのディレクトリにエラーログで出た.libは全部入ってた?
0564デフォルトの名無しさん
2005/08/29(月) 00:37:00貴方はウマクいったの?
0565560
2005/08/29(月) 00:43:46俺は入れてない
スタンドアローンで動くプログラムならCで作ったほうがはるかに簡単だし
perlはインタープリタだからこそ使ってるからな
ぶっちゃけメリットが何一つない気がする
0566デフォルトの名無しさん
2005/08/29(月) 00:45:510567デフォルトの名無しさん
2005/08/29(月) 00:48:100568デフォルトの名無しさん
2005/08/29(月) 00:52:00あたかもやれるよみたいなやつ
ばっか
0569560
2005/08/29(月) 00:53:44だからライブラリを入手しろって
0570デフォルトの名無しさん
2005/08/29(月) 01:17:03perlccはソースを公開したくない時に使うと有用じゃない?
0571デフォルトの名無しさん
2005/08/29(月) 01:26:46ただそれなら別の言語で作ったほうがボリューム的にも格段違うわけだし
perlって割とシェルやawkと同じ感覚で使ってるんだけどな
CGIは別として
0572デフォルトの名無しさん
2005/08/29(月) 02:00:29PerlTrayとタスクトレイ格納ソフト以外で、あれば教えてください。
0573デフォルトの名無しさん
2005/08/29(月) 02:13:15ううっ。。。俺あのときバグ報告進められてたのに忘れてました・・・。
本当に申し訳ない。
0574デフォルトの名無しさん
2005/08/29(月) 04:31:09バグ報告はそれ相応の知識がないと(ry
0575デフォルトの名無しさん
2005/08/29(月) 04:44:060576デフォルトの名無しさん
2005/08/29(月) 05:05:080577デフォルトの名無しさん
2005/08/29(月) 06:00:180578デフォルトの名無しさん
2005/08/29(月) 11:02:250579デフォルトの名無しさん
2005/08/29(月) 14:20:140580デフォルトの名無しさん
2005/08/29(月) 14:24:210581デフォルトの名無しさん
2005/08/29(月) 14:49:510582デフォルトの名無しさん
2005/08/29(月) 14:51:350583デフォルトの名無しさん
2005/08/29(月) 14:55:370584デフォルトの名無しさん
2005/08/29(月) 14:56:500585デフォルトの名無しさん
2005/08/29(月) 15:51:260586デフォルトの名無しさん
2005/08/29(月) 16:15:170587デフォルトの名無しさん
2005/08/29(月) 16:59:390588デフォルトの名無しさん
2005/08/29(月) 17:03:07ー一
0589デフォルトの名無しさん
2005/08/29(月) 17:19:490590デフォルトの名無しさん
2005/08/29(月) 18:50:00それは普通に駄目。
perlcc -v=4 -L /"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib" aaa.pl
とでもすれば、「駄目な理由」は無理でも「駄目という事」は分るだろ?
542のメッセージの抑止「だけ」が目的なら
perl -e "use Config;print $Config{archlibexp}"
で表示されるパスのCOREフォルダにlibを入れとけ。
perlccを使う事が目的なら、Config.pm,Config_heavy.plの定義と実際の環境を一致させる事。
それが出来ない場合で、.plから.cを作りたいなら
perl -MO=C ぬるぽ.pl >ぬるぽ.c
とでもやっとけ。.cから.exeを作る方法は知らん。
0591デフォルトの名無しさん
2005/08/30(火) 03:54:34長さは8文字限定で足りない部分は0で埋めます。
今は下のようにしています。
もっと簡単にできるんじゃないかと思うのですが、どう書いたら良いのでしょうか?
$str = substr( $str, 0, 4 );
$str =~ s/(.)/sprintf( "%02X", unpack("C", $1) )/eg;
$str = substr( $str . '00000000', 0, 8 );
0592デフォルトの名無しさん
2005/08/30(火) 10:16:48とりあえず1二ブル単位で表現するなら
print unpack("H*", substr($str, 0 ,4));
0593591
2005/08/30(火) 11:03:58したいことは、データの先頭4バイトまでを丁度8文字の16進表記に変換することです。
入力の長さは不定です。入力が0バイトの場合も4バイトを超える場合もあります。
出力する16進表記の文字列の長さは常に8文字に揃えます。
出力が8文字に満たない(=入力が4バイトに満たない)場合は出力する文字列の末尾を0で埋めます。
具体的には以下のように変換されます。
"" -> 00000000
"a" -> 61000000
"aaaaaaaaaaXYZ" -> 61616161
宜しくお願いします。
0594デフォルトの名無しさん
2005/08/30(火) 11:35:38print qq|"$_" -> |, unpack("H*", pack("a4",$_)),"\n" for ('', 'a', 'aaaaaaaaaaXYZ');
0595デフォルトの名無しさん
2005/08/30(火) 12:09:21特定のrefererを送信するにはどうすればいいんですか?
0596デフォルトの名無しさん
2005/08/30(火) 12:17:39perl -le 'print &{sub {for (1) {return do {1;1;}}}}'
1
perl -le 'print &{sub {if (1) {return do {1;}}}}'
1
一つ目の出力がおかしいんですが、どなたか説明できますか?
0597
2005/08/30(火) 13:34:03use LWP::UserAgent;
$ua = new LWP::UserAgent;
$response = $ua->get($url, Referer => $url2);
0598デフォルトの名無しさん
2005/08/30(火) 15:23:56何所で消えてるか調べようとしてたらif(1)の1を
オブジェクトに変えたら再現しなくなっちまった・・・バグかなこれ
package CatchDestroy;
sub new {
my ($class, $data) = @_;
my $self = { DATA => $data };
print "new obj ", $self->{DATA}, "\n";
return bless $self, $class;
}
sub DESTROY { my $self = shift; print "DESTROY obj ", $self->{DATA}, "\n"; }
#----------------------------------------------------------
package main;
sub a() {
# if (new CatchDestroy(0)) {
if (1) {
return do {
new CatchDestroy(1);
new CatchDestroy(2);
};
}
}
print "=0\n"; my $t = a();
print "=1\n"; print "$t\n";
print "=2\n"; undef $t;
0599デフォルトの名無しさん
2005/08/30(火) 18:49:40因みに Active Perl 5.8.6 での >>598 出力結果。
=0
new obj 1
DESTROY obj 1
new obj 2
DESTROY obj 2
=1
=2
0600デフォルトの名無しさん
2005/08/30(火) 22:42:02なんか、if (1) {} がオプティマイザによって、do {} になるみたい。
ちゃんとした条件入れると if文のまま。
この自動的な変換と、doの中に複数の命令がある時、というのがダメみたい…。
いまんとこ、それしか分からない。
0601デフォルトの名無しさん
2005/08/31(水) 03:08:27さらに
perl -le 'print &{sub { if(1) { do {$foo=3}}}};' これも空表示になるが、
perl -le 'print &{sub { if(1) { do {$foo=3}}}}; print $foo' は 3 が表示される。
奥が深い…
0602デフォルトの名無しさん
2005/08/31(水) 06:29:550603デフォルトの名無しさん
2005/08/31(水) 06:41:280604デフォルトの名無しさん
2005/08/31(水) 10:13:590605デフォルトの名無しさん
2005/08/31(水) 15:05:320606デフォルトの名無しさん
2005/08/31(水) 20:15:13何秒か過ぎてもページが取得できてない場合は、ページの取得を終了させるにはどうすればいいのですか?
0608デフォルトの名無しさん
2005/08/31(水) 20:58:55そもそも能力値の絶対値ってなんだ?
0609デフォルトの名無しさん
2005/08/31(水) 20:59:530610デフォルトの名無しさん
2005/08/31(水) 21:04:360611デフォルトの名無しさん
2005/08/31(水) 21:05:04よし、ちょっと調べてくる
0612デフォルトの名無しさん
2005/08/31(水) 21:47:16すまん。下のが当たり前すぎてマジで笑える。
0613デフォルトの名無しさん
2005/08/31(水) 22:13:35探すなwwww
0614デフォルトの名無しさん
2005/08/31(水) 22:23:16うわ、本当だ。
なんだよ下のコードwww
0615デフォルトの名無しさん
2005/08/31(水) 22:50:40アニュアルとか知りません
0616デフォルトの名無しさん
2005/08/31(水) 23:13:50perldoc で読めるということでしょ
0617デフォルトの名無しさん
2005/08/31(水) 23:45:27$ua->timeout($n)は試しましたが、何でか知りませんがn秒を過ぎても終了されない事があって非効率的なので、
別の方法があれば教えてください。
0618デフォルトの名無しさん
2005/09/01(木) 00:37:15ページによって差があるようなら、そこにブラウザなりtelnetなりでアクセスしてみては。
0619デフォルトの名無しさん
NGNGコマンドを実行してログアウトするというスクリプトを作り、これをCronで実
行するという処理をしようとしています。
>>620に載せるスクリプトを、端末から実行するとうまく処理されるのにcronで動かす
と、/sbin/ifconfigを実行してくれません。
ログインまでは問題はないようですが、どこが間違っているのか判りません。
お願いします。
0620デフォルトの名無しさん
NGNG#!/usr/bin/perl -w
use DBI;
use Expect;
$user = "foo";
$pass = "bar";
$db_name = "giko";
$table_name = "testdb";
$db = DBI->connect("DBI:mysql:$db_name:localhost", $user, $pass);
$sth = $db->prepare("select * from $table_name");
$sth->execute;
while (@a = $sth->fetchrow_array) {
for ($i = '2'; $i < '6'; $i++) {
if ($a[$i]) {
$exp[$i]=Expect->spawn("ssh -v -o ConnectTimeout=$timeout $user\@$a[$i]\n");
$exp[$i]->expect(300,
[ qr/\(yes\/no\)/ => sub { my $self = shift; $self->send("yes\n"); exp_continue; }],
[ qr/password:/i => sub { my $self = shift; $self->send("$pass\n"); exp_continue; }],
'$'
);
$exp[$i]->send("/sbin/ifconfig -a\n");
$exp[$i]->expect(300,'$');
$exp[$i]->send("exit\n");
$exp[$i]->close();
}
}
}
$sth = $db->disconnect();
0621デフォルトの名無しさん
2005/09/01(木) 12:04:34> n秒を過ぎても終了されない事があって非効率的なので、
> 別の方法があれば教えてください。
LWP::Protocol::http の中で select() を使っているので、これで駄目なら
他の方法なんか無いと思うけど。
0622デフォルトの名無しさん
2005/09/01(木) 12:06:01「ssh HOSTNAME /sbin/ifconfig -a」じゃ駄目なんか?
ログインのところだけ expect 使え。
0623デフォルトの名無しさん
2005/09/01(木) 13:52:18systemだと実行が終わるまで元のプロセスは止まってしまうので駄目なようです。
0624デフォルトの名無しさん
2005/09/01(木) 14:02:14fork
0625デフォルトの名無しさん
2005/09/01(木) 15:57:49ありがとう。
forkに関して質問ですが、
if($p = fork) {
wait;
}elsif(1) {
print "ここは子プロセス\n";
}
waitがないと子プロセスは正常終了しないのですか?
waitがないとゾンビ化?
0626デフォルトの名無しさん
2005/09/01(木) 16:32:33その前に、なんで else じゃなくてわざわざ elsif(1) って書くの?
0627デフォルトの名無しさん
2005/09/01(木) 16:40:56シェルの問題とか、cron実行時のユーザとか、
スクリプト以外に確認する所がありそうな気がします。
0628デフォルトの名無しさん
2005/09/01(木) 20:13:11ごめん。
まぁ、とにかくforkで生成されたプロセスは普通に文末までくれば普通に死んでくれるよね?
0629デフォルトの名無しさん
2005/09/01(木) 20:43:12waitがないと子が終了後にゾンビ化したままになる。
親をwaitでブロックさせたくなければ SIGCHLD のハンドラを書いて
受け取ったらwaitするようにするか、または定期的に waitpid を
すれば良い。
注) 全てのOSでこのようになるとは限らない。上記はUNIX系OSでの話。
0630デフォルトの名無しさん
2005/09/02(金) 09:19:24if ($p = fork) {
wait;
} else {
fork && exit;
# child
}
子の子は面倒みる必要ない。
0631デフォルトの名無しさん
2005/09/02(金) 15:12:28裏(バックグラウンド?)で実行させる方法ありませんか?
Windows xpでactive perl5.8.7使ってます。
0632デフォルトの名無しさん
2005/09/02(金) 15:18:13image/pjpeg のような感じです。
0633デフォルトの名無しさん
2005/09/02(金) 15:30:30>>58-61
>>632
判断するってこと?
0634デフォルトの名無しさん
2005/09/02(金) 15:30:390635デフォルトの名無しさん
2005/09/02(金) 15:33:28参考:http://www.google.co.jp/
備考:perl.exe バックグラウンド
0636デフォルトの名無しさん
2005/09/02(金) 15:44:34そんな感じです。
cgi-libと言う物を使えばup時に取得できますが、
既にアップロードされているものを何のファイルか再取得してみるっと言った感じです。
>>634
$enctype = system("file $files");
こんな感じで使ってみましたが、0が返ってきました。
使い方間違っていますでしょうか
0637デフォルトの名無しさん
2005/09/02(金) 16:11:10Win32::Console::Freeだと
一瞬、コマンドプロンプトが表示されるのが嫌なんだけど、どうにかならないかな。
0638デフォルトの名無しさん
2005/09/02(金) 16:12:34$enctype=`file $file`;
基本的な関数の動作位覚えよう。systemはコマンドの戻り値(主にエラーコード)が返って、出力は標準出力へ
0639デフォルトの名無しさん
2005/09/02(金) 16:39:42ありがとうございます。結果を取得する事が出来ました。
やっぱ【image/pjpeg】こんな感じで出すのは無理すかね^^;
とりあえずこの結果を正規表現でこれに近づけるようにしてみます。
0640デフォルトの名無しさん
2005/09/02(金) 16:39:430641デフォルトの名無しさん
2005/09/02(金) 16:59:54File::MimeInfo なんか使えないかな?
0642デフォルトの名無しさん
2005/09/02(金) 17:21:12Webサーバ経由で外部からアクセス可能な所に画像があるならばそのサーバに
HTTP で接続して HEAD でヘッダだけ取得すれば Content-Type: に image/jpeg
とか入ってるよ。
0643デフォルトの名無しさん
2005/09/02(金) 18:08:04ググッて見ましたが知識不足で・・・
>>642
出来ました、ありがとうございます。
0644デフォルトの名無しさん
2005/09/02(金) 21:13:22CPANモジュールの名前見てぐぐってんじゃねぇ。
CPANで検索しる
http://search.cpan.org/~pardus/File-MimeInfo-0.11/MimeInfo.pm
0645デフォルトの名無しさん
2005/09/02(金) 22:31:58MimeInfoが鯖に入っていない模様でした。
0646デフォルトの名無しさん
2005/09/04(日) 19:05:54use lib './';
0647デフォルトの名無しさん
2005/09/04(日) 19:16:36http://search.cpan.org/
に行って、MimeInfo を検索したらどうだろうか」
という程度のことも考えられないのだろうか。
0648デフォルトの名無しさん
2005/09/04(日) 19:54:472桁の数字の場合は頭に1つ「0」を付けて、
3桁の数字の場合は何もつけないで出力したいのですが、
ifとか使わないで、簡潔に記述したいのですがどうすればいいですか?
0649デフォルトの名無しさん
2005/09/04(日) 20:01:28$str = sprintf ("%2d", $math);
これ?
0650デフォルトの名無しさん
2005/09/04(日) 20:05:07それだと頭にスペースが付くけど、
「0」が付いて欲しい。
0651デフォルトの名無しさん
2005/09/04(日) 20:09:42$str = sprintf ("%02d", $math);
これ?
0652デフォルトの名無しさん
2005/09/04(日) 20:10:36sprintf("%02d", $math);
おしかったな >>649
0653デフォルトの名無しさん
2005/09/04(日) 20:11:22それ。ありがと
0654デフォルトの名無しさん
2005/09/04(日) 20:11:55おしかったな
0656デフォルトの名無しさん
2005/09/04(日) 21:01:070657デフォルトの名無しさん
2005/09/04(日) 21:02:53質問あんま読んで無かっただけじゃないかと…
0658デフォルトの名無しさん
2005/09/04(日) 21:23:27そこで次のサブルーチンを作成してみました
[ $Trafic_Timeout ]秒間に [ $Trafic_min_limit ] バイト転送したら転送量エラーと表示したいとして
&TraficPlus(画像サイズ);
って感じで呼び出したいと思っています。
全くスマートなプログラムではありませんが、これでいけると思ってやった見て、何度か改良しましたがうまくいきません。
どなたか改良又は知恵をかしていただけませんか?宜しくお願いします。
sub TracficPlus{
$plus = $_[0];
my $size;
&filelock('tr.lock');
$Trafic_min_limit = 202400;
$Trafic_Timeout = 60;
my $nowtime=time;
open(IN,"time.trafick");$mtime = <IN>; close(IN);
open(IN,"now.trafick");$total = <IN>;close(IN);
$time = $nowtime - $mtime ;
if($time > $Trafic_Timeout){
$total = 0;
open(IN,">time.trafick");print IN $nowtime; close(IN);
}
$total += $plus ;
open(IN,">now.trafick");print IN $total;close(IN);
open(IN,"total.trafick");$ttt = <IN>;close(IN);
$ttt += $plus;
open(IN,">total.trafick");print IN $ttt;close(IN);
&fileunlock('tr.lock');
if($total > $Trafic_min_limit){&Error($Limit);}
return $size;
}
0659デフォルトの名無しさん
2005/09/04(日) 22:07:470660デフォルトの名無しさん
2005/09/04(日) 22:09:010661デフォルトの名無しさん
2005/09/04(日) 22:13:42ふざけてないで教えてくれよ!!
マニュアル見んのめんどくせえんだよ!!!
0662デフォルトの名無しさん
2005/09/04(日) 22:15:27CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
0663デフォルトの名無しさん
2005/09/04(日) 22:19:51了解です
0664デフォルトの名無しさん
2005/09/04(日) 22:39:11> マニュアル見んのめんどくせえんだよ!!!
英語のマニュアル読めないんだよ!と正直に言えば
教えてもらえるかもしれないのに
0665デフォルトの名無しさん
2005/09/04(日) 23:45:11つ while(1){}
0666デフォルトの名無しさん
2005/09/04(日) 23:59:590667デフォルトの名無しさん
2005/09/05(月) 00:24:13と
for (;;) {〜}
っておんなじだよね?
0668デフォルトの名無しさん
2005/09/05(月) 00:25:040669デフォルトの名無しさん
2005/09/05(月) 01:09:38おんなじだよ。
> cat test.pl
while(1){1}
for(;;){1}
> perl -MO=Deparse test.pl
while (1) {
'???';
}
while (1) {
'???';
}
test.pl syntax OK
0670デフォルトの名無しさん
2005/09/05(月) 01:13:13とすれば、最初から while (1) {} と書いたほうが良いのかな
0671デフォルトの名無しさん
2005/09/05(月) 07:07:39意味は同じだが、while(1) の方がより自然言語に近いからベター。
for(;;) って書く香具師、キライ。
0672デフォルトの名無しさん
2005/09/05(月) 07:35:320673デフォルトの名無しさん
2005/09/05(月) 08:43:440674667
2005/09/05(月) 08:44:10ありがと。普段はwhile(1)って書くけど、web上で見つけたコードでfor(;;)を使ってるコードがあって気になってた。
つーか、
perl -MO=Deparse
こういうやり方あったのか。知らなかったから勉強になった。thx.
0675デフォルトの名無しさん
2005/09/05(月) 11:21:18おもすれーこれ
0676デフォルトの名無しさん
2005/09/05(月) 14:19:190677デフォルトの名無しさん
2005/09/05(月) 15:43:55while(1)が正解さ。
forはね、何かをカウントする時に使う。って使い分けが読みやすくす秘訣。
0678デフォルトの名無しさん
2005/09/05(月) 15:46:470679デフォルトの名無しさん
2005/09/05(月) 16:33:040680デフォルトの名無しさん
2005/09/05(月) 16:33:31それは、よっぽどのヘタレコンパイラ。
今時のちゃんとしたコンパイラなら、Warningなど出ない。
0681デフォルトの名無しさん
2005/09/05(月) 16:48:40(#define forever for(;;) でも同じ)
ちなみに俺は書かない。
0682デフォルトの名無しさん
2005/09/05(月) 16:56:23俺も書かない。単なるアホだと思う。
でもそれ、Perlがやってることに非常に似てる。
「ここで "is" って書く代わりに、"are" って書けたら自然で良くね?」
「いいねぇ、追加しちゃえ。」
「ジャーン!Perlは更に自由度を手に入れました!どっちも同じ意味ですが。」
0683デフォルトの名無しさん
2005/09/05(月) 16:57:09Perlについての質問箱です。
Perlについての質問箱です。
0684デフォルトの名無しさん
2005/09/05(月) 18:30:540685デフォルトの名無しさん
2005/09/05(月) 19:04:49しかし、Perlほど英文ぽさを意識しておきながら
そこで「複数のブツ」にもisしか使えないとなると、
それはそれで思想的な一貫性に欠ける気もするし、難しいところだなー。
0686デフォルトの名無しさん
2005/09/05(月) 20:28:080687デフォルトの名無しさん
2005/09/05(月) 22:15:34プリプロセッサのマクロで気分で変更してます><
0688デフォルトの名無しさん
2005/09/05(月) 22:18:27宗教戦争に負けないような、強い自己を持ちましょう。
0689デフォルトの名無しさん
2005/09/05(月) 22:23:00至言だね。
0690デフォルトの名無しさん
2005/09/05(月) 22:24:41print($a,$b,$c);
と
print $a,$b,$c;
って何が違うの?
0691デフォルトの名無しさん
2005/09/05(月) 22:35:14test.cは読み書き可能な状態なのにundefineが返してくるのは何で?
0692デフォルトの名無しさん
2005/09/05(月) 22:38:300693デフォルトの名無しさん
2005/09/05(月) 22:53:090694デフォルトの名無しさん
2005/09/05(月) 23:12:000695デフォルトの名無しさん
2005/09/05(月) 23:13:51もう一度自分の質問を点検せよ。
0696デフォルトの名無しさん
2005/09/05(月) 23:17:04ミス
open関数によって作成されたファイルの権限ってどうなってるの?
0697デフォルトの名無しさん
2005/09/05(月) 23:25:22PostgreSQLを使用するスクリプトでPg.pmが使われているのを
DBIを使うように書き換えていきたいんですが。
0699デフォルトの名無しさん
2005/09/06(火) 00:17:07man umask
0700デフォルトの名無しさん
2005/09/06(火) 00:30:48そのスクリプトがDBD::Pg を直接叩いてるなら、狙ったのは速度でしょうね。
スクリプト --> DBI(Perl) --> DBD::Pg(Perl, XS) --> Postgres
スクリプト --> DBD::Pg(Perl, XS) --> Postgres
DBIで書き換えるのは賛成です。
メソッド名がDBIと揃ってるんじゃないかと思うので、そんなに労力要らないハズです。
0701デフォルトの名無しさん
2005/09/06(火) 01:18:110702デフォルトの名無しさん
2005/09/06(火) 01:28:13おい。DBD::PgじゃなくてPgだろ。
0703デフォルトの名無しさん
2005/09/06(火) 02:50:390704619-620
NGNG>>627
ありがとうございます。
やっと解決しました。
>>620に載せたスクリプトには問題はありませんでした。
ただ、Cronの実行の仕方に問題があったのでした。
【失敗】
10 * * * * /home/user/test.pl
【成功】
10 * * * * /home/user/test.pl < /dev/zero > /dev/null 2>&1
最後の/dev/null・・・の部分はログを残したい場合は、そのファイルを指定します。
Cronのあるバージョンからこのように明示しなくてはならなくなったようです。
このページを参考にしました。
http://www.turbolinux.co.jp/support/document/knowledge/639.html
遅くなりましたが解決しました。
ありがとうございました。
0705デフォルトの名無しさん
2005/09/06(火) 18:00:260706デフォルトの名無しさん
2005/09/06(火) 19:44:21ってやって意味あるの?
やらないのと何が違うのか具体的に教えて。
0707デフォルトの名無しさん
2005/09/06(火) 19:46:55Windows(ActivePerl)だと問題が発生する
Cygwin/UNIXじゃ大丈夫だけどな
Windowsはテキストファイルとバイナリファイルを区別してるから
バイナリファイルを読み込むときはbinmodeしないとファイルを正しく読み込めない
とラクダ本に書いてあります
ラクダ本ぐらい買えよ
0708デフォルトの名無しさん
2005/09/06(火) 20:26:541行でデータが羅列されているテキストファイルに改行をいれたいのです。
例えば X Y Z X Y Z X Y Z というファイルを
X Y Z
X Y Z
X Y Z
にしたいのです。、一応動くのですが、なんとなく遠回りしてる気がして・・・・
データ数も多いので、処理速度を改善できないかとご相談を。
もしよろしければ、間違った文法のご指摘等もよろしくお願いします。
open(FILE, "$file") or die "ERROR:そのようなファイルはありません。\n";
while(<FILE>){
@gyo = $_;
}
$all = @gyo[0];
$outfile = "out.txt";
open(OUTPUT, ">>$outfile");
$count = 1;
while($count < 33697){
$tests = substr($all,0,85);
$testss = $tests . "\n";
$all =~ s/$tests//g;
push @alls ,$testss;
$count = $count + 1;
}
foreach(@alls){
print OUTPUT "$_";
}
close(OUTPUT);
close(FILE);
0709デフォルトの名無しさん
2005/09/06(火) 20:34:28@gyoにファイルのデータをためこむとメモリ使用量が増大して実行速度は遅くなるだろうね
普通はbufferとか変数つくって1024byteごと読むとかがセオリーだけど
その処理なら
一行よんで一行(分割した行)を書き込むという処理がベストかと
0710デフォルトの名無しさん
2005/09/06(火) 20:40:00標準で有効になっているエンコード変換(の一種)を抑止する指示。
この変換は、OS標準のテキスト形式をPerlが想定するテキストストリーム形式に変換する。
OSの標準形式がPerlが想定するテキストストリーム形式と等しい場合は、何も起きない。
極端な例.
perl -e "use encoding 'euc-jp';while(<STDIN>) {print}" <in.euc >out.euc
perl -e "use encoding 'euc-jp';binmode(STDOUT);while(<STDIN>) {print}" <in.euc >out.utf8
perl -e "use encoding 'cp932';while(<STDIN>) {print}" <in.sjis >out.sjis
perl -e "use encoding 'cp932';binmode(STDOUT);while(<STDIN>) {print}" <in.sjis >out.utf8
これは、テキストモードだと文字コード自体の変換を伴う例。
binmode時は、文字コードの変換も止まっている事がわかると思う。
警告が邪魔なら、printの前にuse bytes; 入れれ。
0711708
2005/09/06(火) 21:11:53あ、元のファイルは1行しかないんです。
85文字目までが1行の単位でそれが33697回繰り返してある1行のファイルなんです。
最初のファイルから1行読むってのは85文字目まで読むってことですか?
そうすると次は85〜170まで次は〜って感じですか?
0712デフォルトの名無しさん
2005/09/06(火) 21:14:26Whileじゃなくてreadで85byteづつ読んだほうがいい
0713デフォルトの名無しさん
2005/09/06(火) 21:32:29while(<FILE>){ chomp; print OUTPUT $line,"\n" while ( $line = substr( $_, 0, 85 , q[] ) ) }
0714デフォルトの名無しさん
2005/09/06(火) 21:38:58約 3MB のファイルか。
メモリ利用の効率を無視できるなら、それくらいの容量なら、
今のままの一気に読み込む富豪的アルゴリズムでもいいと思うけどね。
(目的と、ファイルサイズがどれくらいになりうるかで
決めるといいかも。)
フィールド長(85バイト)が決まっているなら、
read で書いても簡単に書けると思うし、
不定でもバッファを用意すればいいね。
>>708のコードは次のように簡潔に書けるから、参考になりそうならどうぞ。
メモリ効率等は改善してないが、可変フィールド長には対応。
open(IN, $file);
my @data = split(/\s+/, <IN>);
close(IN);
open(OUT, ">>$outfile");
for (my $i=0; $i<@data; $i+=3) {
print OUT "$data[$i] $data[$i+1] $data[$i+2]\n";
}
close(OUT);
0715デフォルトの名無しさん
2005/09/06(火) 22:26:01while ( @data ){
printf ("%s %s %s\n" , ( shift @data, shift @data, shift @data))
}
になるのかな?
for(;;) というよりも添字がごちゃごちゃしてて嫌い。
0716デフォルトの名無しさん
2005/09/06(火) 22:29:39レスありがとうございます。
大体3MB弱のファイルなのですが、これが400ファイルほどあって。。。
出来るだけ処理速度を上げたいと思いまして。。。
改善の余地としては
@gyoのところで全部読まず1行づつreadで読み書きするようにするとメモリ使用量が少なくてすむ!
という感じですね。
readというものを知らなかったのでこれを使って少し改善してみたいと思います。
>>713さんのだと1行で出来ちゃうのですか?
私にはどんな処理を行っているかすぐに出てきませんOTZ
勉強していろいろ試してみたいと思います。
私の最初の記述でも>>714さんの位短く書けてしまうのですね。
参考にさせていただきますφ
0717デフォルトの名無しさん
2005/09/06(火) 22:36:03こういう場合、ディスクのIOの方がネックになるのでreadでチマチマ読むより一気にメモリに読み込んで処理した方が速いんじゃなかろうか?
この程度だったらたいした差にはならないだろうけど。
0718デフォルトの名無しさん
2005/09/06(火) 22:43:43気にしなくていいんじゃないかと。
0719デフォルトの名無しさん
2005/09/06(火) 22:45:12perl -e 'local $/ = \85; print map "$_\n", <>' file1 file2 file3 ... > splited.log
0720デフォルトの名無しさん
2005/09/06(火) 23:00:40単純に処理速度を上げたいだけなら、717も書いているが
ファイルを一気に読み込むコードのままでもOK。
さらに処理速度を上げたいなら、
例えば ファイルを 100 個ずつ個別に処理し、
最後に結合するなども。
(要するに並列処理を。)
>>719
ワロタ
これで入力ファイルを1つずつにして、シェルスクリプトでファイルを1つずつ渡してやれば
十分現実的だね。
for i in file*.log; do perl -e 〜 $i >> splited.log; done
0721デフォルトの名無しさん
2005/09/06(火) 23:00:42いや、マジで。
$/ に\数字使うって知らなかったよ。
map でなく、普通に while 使って
perl -ne 'BEGIN{$/ = \85}; print $_,"\n"' file1 file2 file3 ... > splited.log
で超富豪からちょっと慎ましく。
0722712
2005/09/06(火) 23:03:38-n オプション付けてるんでwhileループは省略してます
0723722
2005/09/06(火) 23:17:41712 と 721 間違えた。
ついでに 3M*400 = 1.2G となるとやっぱりネックはディスクへのアクセス。
out.txt を読み込みファイルと別のディスクにすると速くなるはず。
それと、100個ずつ並列処理なんかさせるとディスクのアクセスが不連続になって逆に遅くなるのでは?
0724デフォルトの名無しさん
2005/09/06(火) 23:23:53「すれ立てるまでもない質問はここで 第69刷」スレの921,925で質問していた者ですが
こちらのスレが適しているということで来ました。
元々他スレの話題で大変恐縮なのですが、
$str = "0xa4a2";
print &hoge($str);
で画面に"あ"と表示させたい場合に、関数&hoge はunpack を使って実現できるとお聞きしたのですが
どのようにすればうまくいくのでしょうか
元々は
1.文字列「0xa4a2」(EUCの「あ」)
↓???
2.文字列「0x82a0」(SJISの「あ」)
↓pack
3.文字列「あ」
※自分のところには、コード(EUC)の形でしか渡してもらえない
という流れで考えていました。1から3に直接飛べるならそれに越したことはないのですが・・・
0725デフォルトの名無しさん
2005/09/06(火) 23:37:18読み込みの方に時間がかかるなら、たしかにファイルへのアクセスが不連続
になって遅くなるかも。
もちろん並列の場合のアルゴリズムは>>714に書いたように一気に読み込むものだけど。
どちらにせよ、速度の差は多分、出ても数倍のオーダーだろうね。
素直に直列(?)処理でよさそうだ。
出力ファイルのドライブを分けるのは、効果ありそうだね。
0726ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/06(火) 23:42:44元の質問はコレね?
http://pc8.2ch.net/test/read.cgi/tech/1123220967/921
とりあえずロジックを考える時は、やらなきゃいけない事を分けよう。
1. 16進数文字列 → 通常の文字列
2. EUC-JP → Shift_JIS 変換
use Encode qw/from_to/;
# '0xa4a2' → EUC-JP の「あ」
my $str = '0xa4a2';
$str =~ s/^0x//i;
my $euc_a = pack('H*', $str);
# EUC-JP の「あ」 → Shift_JIS の「あ」
from_to(my $sjis_a = $euc_a, 'EUC-JP', 'Shift_JIS');
print $sjis_a;
これでいいかね。
0727デフォルトの名無しさん
2005/09/07(水) 00:04:54$str = pack("n",eval $str);
0728724
2005/09/07(水) 00:06:12できました。ありがとうございます!
需要はないと思いますが、私のミスを整理してみました_| ̄|○
1.pack関数にSJIS「あ」の文字コードを入れてみると、うまく変換された。
2.pack関数にEUC「あ」の文字コードを入れてみると、うまく変換されなかった(実際はコマンドプロンプト上で文字化けしてるだけ)
3.1と2の出来事から、pack関数はSJISしか受け付けてくれないものと勘違い
※pack関数の引数に"SJIS"とか"EUC"が必要なかったため、勘違いしてしまいました。実際は文字コード自動判別してくれるんですね。
4.そして泥沼へ・・・
ご迷惑をお掛けして申し訳ありませんでした。
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
2005/09/07(水) 00:10:37乙。
結果報告は重要だと思うので、しっかりお礼&報告する
姿勢はよいと思うぞ。
0731デフォルトの名無しさん
2005/09/07(水) 00:28:54結果報告だけでいい。
0732デフォルトの名無しさん
2005/09/07(水) 01:46:53ありがと
ところで、binmodeからテキストモードに戻す場合はどうすればいいの?
0733デフォルトの名無しさん
2005/09/07(水) 05:30:01binmode(IN, ":crlf")
0734デフォルトの名無しさん
2005/09/07(水) 05:37:25printf( "%s %s %s\n", splice @data, 0, 3 ) while @data;
じゃね?
0735デフォルトの名無しさん
2005/09/07(水) 09:47:41もし存在しなければ$hogeというファイルを作成→終了。
もし存在したなら$hogeに1を足してまた存在を確認、、、、
とえんえん繰り返していくようにするはどうすればいいですか。
0736デフォルトの名無しさん
2005/09/07(水) 10:17:32「1を足す」の実際の動作やら何やらは特定できんが、
考え方としては
while (1) {
if (-e $hoge) { ++$hoge; }
else { open F, $hoge and last; }
}
0737デフォルトの名無しさん
2005/09/07(水) 10:25:36while (1) {
next if -e $hoge++;
open F, $hoge and last;
}
0738デフォルトの名無しさん
2005/09/07(水) 10:29:06さっそくやってみます。
0739デフォルトの名無しさん
2005/09/07(水) 11:08:30それでも動くけれども、複数同時に走らす場合は、
A: -eでしらべる。なさげ
B: -eでしらべる。なさげ
A: ファイル作成
B: ファイル作成
てなことになりかねないので危険です。
私が書くならsysopenでO_EXCL指定してEEXISTエラーのときだけ
$hoge++してリトライでこんな感じ。
use Fcntl;
my $hoge = 0;
while (!sysopen F, $hoge, O_WRONLY|O_CREAT|O_EXCL) {
$!{EEXIST} or die "sysopen $hoge: $!";
$hoge++;
}
でも一時ファイルですぐ消すんならFile::Tempとか使った方がいい
だろうし、どんどん作られていくなら別にカウンタもった方が効率的
じゃないかと。
0740デフォルトの名無しさん
2005/09/07(水) 11:10:060741デフォルトの名無しさん
2005/09/07(水) 11:15:180742デフォルトの名無しさん
2005/09/07(水) 11:22:46とっとと訊かれたことだけ答えたほうがこの場合よさげ。
0743デフォルトの名無しさん
2005/09/07(水) 12:16:440744デフォルトの名無しさん
2005/09/07(水) 12:44:360745デフォルトの名無しさん
2005/09/07(水) 16:09:11die "Can't change mode.";
0746デフォルトの名無しさん
2005/09/07(水) 16:33:09sourou() if $mi-kosuri-han;
0747デフォルトの名無しさん
2005/09/07(水) 16:43:300748デフォルトの名無しさん
2005/09/07(水) 17:36:12echo $haxahaxa;
0749デフォルトの名無しさん
2005/09/07(水) 18:16:020750デフォルトの名無しさん
2005/09/07(水) 18:33:080751デフォルトの名無しさん
2005/09/07(水) 20:38:44length q caller getc and print chr ord qw q do q and print chr ord q local and print chr ord qw q uc q and print chr ord q tie gt
0752デフォルトの名無しさん
2005/09/07(水) 20:48:400753デフォルトの名無しさん
2005/09/07(水) 20:56:420754デフォルトの名無しさん
2005/09/07(水) 21:14:46オススメ。
0755デフォルトの名無しさん
2005/09/08(木) 10:57:36各ハッシュがテーブルの行になる%hashがあります。
キーが列名で、値がセルの内容です。
%hash=('a'=>1, 'b'=>2, 'c'=>3);
push(@array, \%hash)
%hash=('a'=>4, 'b'=>5, 'c'=>6);
push(@array, \%hash)
%hash=('a'=>7, 'b'=>8, 'c'=>9);
push(@array, \%hash)
%hash=('a'=>10, 'b'=>11, 'c'=>12);
push(@array, \%hash)
%hash=('a'=>13, 'b'=>14, 'c'=>15);
push(@array, \%hash)
%hash=('a'=>16, 'b'=>17, 'c'=>18);
push(@array, \%hash);
があって、@arrayの中身を
$hash{'c'}の値で各%hashをソートさせたいときはどうしたらいいでしょうか??
つまりテーブルの列の値で、行をソートさせたいのです。
0756デフォルトの名無しさん
2005/09/08(木) 11:31:04でもその例のままだとpushされてるのは全部同じハッシュへのリファレンスだから、
すべての@arrayの行が%hashの最新の状態、つまり
('a' => 16, 'b' => 17, 'c' => 18)になっちゃうよ。
0757デフォルトの名無しさん
2005/09/08(木) 13:57:300758デフォルトの名無しさん
2005/09/08(木) 14:54:100759デフォルトの名無しさん
2005/09/08(木) 16:30:11分からないなら答えなければいいのに。
0760デフォルトの名無しさん
2005/09/08(木) 16:51:37このプログラムのログ(成功とか失敗などなど)を syslog のように出力したいのですが、
一般的に log をとる場合はどのようにしているのでしょうか
0761ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/08(木) 17:09:47プログラムから STDERR に出力して、cron にログを取らせるのが一般的。
syslog のようにどころか、大抵の cron は syslog に丸投げ。
今時の UNIX 環境では、標準的な状態ではそうなっていると思う。
それは嫌だ、というのであれば、CPAN Search に行って syslog や log などの
単語で検索して、一度死ねばいいのに。
0762ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/08(木) 17:11:14ごめん、これは誤爆(;´Д`)ちょっとメッセしてたもんで…
0763デフォルトの名無しさん
2005/09/08(木) 18:48:04どんな誤爆だ(w
0764デフォルトの名無しさん
2005/09/08(木) 21:12:090765デフォルトの名無しさん
2005/09/08(木) 21:26:570766708
2005/09/08(木) 22:23:53皆さんに言われ、readを使って自分なりに考えてみたのですが。
なんと、、readを使うと以前より大幅に処理スピードアップしました!!!
ここまで違うとは思いませんでした。ちなみにあの記述だと1つのファイル5分位かかっていたのですが
readを使った方法では1秒強になりました。何が原因だったんでしょう?やはりメモリに一気に
読ませてたことなのかな?
自分はこんな感じでreadを使いました。
open(FILE,"<$file") or die "ERROR:そのようなファイルはありません。\n";
while(read(FILE, $gyo, 85)){
push @alls, $gyo;
}
foreach(@alls){
print OUTPUT "$_\n";
}
close(OUTPUT);
close(FILE);
0767デフォルトの名無しさん
2005/09/08(木) 23:28:08解決乙。これでも良いのでは。
open(FILE,"<$file") or die "ERROR:そのようなファイルはありません。\n";
while(read(FILE, $gyo, 85)){
print OUTPUT $gyo, "\n";
}
close(OUTPUT);
close(FILE);
0768708
2005/09/08(木) 23:36:43あれ?>>767さんの見て今思ったんですが、自分の結局@allsに全部溜め込んでますね・・・・
何でそんなに差が出たんでしょう(汗
>>767さんのだと一行づつ読み書きする理想的な記述ですね!
0769デフォルトの名無しさん
2005/09/09(金) 00:12:47open(FILE,"<$file") or die "ERROR:そのようなファイルはありません。\n";
local $/ = \85;
print OUTPUT "$_\n" while (<FILE>);
close(OUTPUT);
close(FILE);
>>708 に関しては、文字列連結や正規表現が繰り返されてた
というのも速度に関係あるかもね。
0770デフォルトの名無しさん
2005/09/09(金) 01:13:32いや、いくらなんでもその程度の処理に5分はかかりすぎだろ!
5分*400ファイル=2000分=約33時間.....
その上、$all=s/tests//g なんてやってるから同じデータがあると全部消されたり、
84,85文字目が「.*」だったらそこで終了するし....
ま、いずれにしろ、結果的に速くなったならいいか。
出来れば、どの処理で遅くなっていたのか報告が有れば嬉しいのだが...
0771デフォルトの名無しさん
2005/09/09(金) 01:42:33数値のリファレンスを $/ にセットして行入力演算子で
読むのは、素直に read を使うのより大分遅い。
- local $/ = \85;
- print OUTPUT "$_\n" while (<FILE>);
+ local $\ = "\n";
+ print OUTPUT while read FILE, $_, 85;
0772デフォルトの名無しさん
2005/09/09(金) 04:09:450773ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/09(金) 04:54:28当たってるだけに笑えない(´Д`)
>>766
エラーメッセージは $! を使った方が良い。
open(FILE, "< $file") or die("ERROR: $file: $!");
>>772
まとまった解説は読んだ記憶がない。
基本的に、使い方は C 言語でのソケットプログラミングと同じなので、
それに関するドキュメントと、perldoc を読むと良いかと。
Net::* はSocket.pm 使ってたりするので、読むと参考になるかも。
あと、凝った事をする必要がないのであれば、IO::Socket とか、
楽な方向に逃げるのも一つの手。
0774デフォルトの名無しさん
2005/09/09(金) 13:02:11>Socketとかそういうのに関して詳しく解説してるサイトない?
あなたのマシンがそうです。
0775デフォルトの名無しさん
2005/09/09(金) 19:55:46>何が原因だったんでしょう?
$all=~s/$tests//g
1回の置換速度は $allの長さ($allに含まれる要素数 N )に「ほぼ」比例するので、
全ての要素を処理したときの s/// の演算量は O(N^2)
s///がネックになって、コード全体の演算量も O(N^2)
対して、>>766や他の人のコードの演算量は O(N)
要素数3万だと3万倍差なので、5分(300秒)と1秒の違いも不自然じゃない。
試しに、>>708の $all=~s/$tests//g を $all =~ s/$tests// や substr($all,0,85)=''
に変更しただけのコードで速度を確認してみるといい。
0776708
2005/09/09(金) 20:54:01その前に、お詫びと訂正を・・・・_| ̄|○
最初の記述で5分は嘘でした。。。。
今日アバウトに計ってみると2分半位でした。
で、いろいろ試してわかったのですが、やはり
$all=~s/$tests//g
の部分が遅い原因でした。
これ以外の処理では、細かくは計っていませんが遅くても2秒より
遅くなることはありませんでした。
この1行の処理で2分30秒のほぼ全てを使っているとは・・・・・
ちなみに g を抜いた
$all =~ s/$tests//
の記述では処理時間4秒となり、やはり全てマッチを調べると
時間が掛かるみたいですね(汗
0777デフォルトの名無しさん
2005/09/10(土) 09:53:100778デフォルトの名無しさん
2005/09/10(土) 10:47:25ブログを再構築(インデックス)をPerlで自動的にやりたいのですが、
どうすればいいでしょうか?
LWP使ってPOSTしてみましたが、その後返されるページのjavaスクリプトによって、
処理されてるみたいです。
0779デフォルトの名無しさん
2005/09/10(土) 11:03:36だから、次のどのページにアクセスするか、ソースから正規表現でURLを抜き出して順次アクセスすれば良いと思う。
最初からアクセスするページをうち決める方法もあるが、月ごとのページなどを余分に生成することになるので、これはライブの鯖に優しくない。
自分で日時取得してURLを生成するのもアリ。
0780デフォルトの名無しさん
2005/09/10(土) 15:20:350781名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:39:35その際
A1 -> A2, "このパターンに対応した文字列"
B1 -> B2, "このパターンに対応した文字列"
:
みたいな感じに変換します。この時、今は、
データ構造として上の→の左側と右側で
それぞれ個別の変数に入れて、if 分で
対応させる関数作ってやってるんですが、
もうちょっと見通し良くするためには
どういうデータ構造にすべきでしょうか。
0782名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:41:20ハッシュじゃなくて?
0783名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:45:42>>781みたいに、A => B, C みたいに1対多の対応付けはどう
やるんでしょう
0784名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:47:46%hash = (A => [1, 2]);
print $hash{A}[0];
みたいに匿名の配列参照するとか
0785名無しさん@そうだ選挙に行こう
2005/09/10(土) 18:50:09ありがとうございます。
ハッシュで書き直してやってみます。
0786名無しさん@そうだ選挙に行こう
2005/09/10(土) 21:34:430787名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:15:09> mechanizeをCGIサーバに置くことはできますか。
ぼくの自宅のCGIサーバには普通に置けます。
0788名無しさん@そうだ選挙に行こう
2005/09/11(日) 00:41:58まだメリットがよくわからず、正直、面倒くさいんですが……
すると、$PI=3.1415926535,$E=2.71.... をほぼ全てのサブルーチンに書くことになってしまいました。
グローバル変数のままだとファイルの先頭の方に一回だけ $PI と書けば良かったのです。
今は sub でサブルーチンを定義するたびに$PI を定義する必要があります。
皆さんuse strictしたときに定数を使用するときにはどうされているのでしょう?
自分の考えとして
(1)全サブルーチンで定義する
(2)$PI と書いていたところをすべて $main::PI に置換
(3)sub PI{ return 3.1415926535 } として $PI を PI に置換
などがあると考えたのですが、他に何かいい方法は無いでしょうか?
プログラム全体で適用される定数用のマクロ定義みたいなのは無いのでしょうか。
0789名無しさん@そうだ選挙に行こう
2005/09/11(日) 00:51:23漏れはPIとか設定とかそう言うのであればuse strictした上でグローバル変数にするが…
グローバル変数が駄目ってのはグローバルにするべきでないローカルスコープであるべき変数の話じゃないかい?
0790788
2005/09/11(日) 01:00:28(5) our $PI = 3.141592 ;
というのもあります。
ただ、(3)(4) は「$」で始まらないので、何か奇妙な感じがします。
>>789 さんが言われているのは(5)ということでしょうか?
グローバル変数はダメだといわれたので、まだ理由もよくわかんないままやってるのです。
やはり場合によってはグローバル変数使った方が良いときもありますよね?
0791名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:01:06あースマソ論点がずれてたかな
use strict;しても同じパッケージ内なら普通にいけると思うんだけど・・・
何か勘違いしてる?
use strict;
my $PI = 3.1415926535;
hoge();
sub hoge {
print $PI;
}
0792名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:02:49use constant使えよ... まあ中身は(3)なんだがね。
0793788
2005/09/11(日) 01:18:19同一ファイルの中であればいちいち定義しなくても良いのですね。
ただ、別ファイルにして
require 'my_functions.pl';
して、そのなかで$PI を使うととエラーがでてしまいます。
これも my_functions.pl の先頭に1回書いておくと良いようです。
0794名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:30:31$value = 3.1415926535;
1;
こんな物を書いた奴をhoge.plとでもしてrequireすれば$PI::value で読めなかったっけ?
packageいまいち分かってないからよーシラネ
0795名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:34:21BEGINブロックの中に入れてやれ
use strictはBEGIN節の中でチェックが走るからrepuireの実行時読み込みでは遅い
0796名無しさん@そうだ選挙に行こう
2005/09/11(日) 01:50:34間違えたorz
あと、use strictするようなPerl5環境で共通関数をrequireで取り込むのはあまり感心しないな。
出来ればモジュール化するべきだと思うよ
0797788
2005/09/11(日) 02:06:50レベル5弱 のヘタレPerl 使いなのでモジュールの作り方がよくわからないんです。
require と use って、そんなに違うものなんでしょうか?
strict するような環境で require しないほうがいい理由もまだわからないのですが。
0798名無しさん@そうだ選挙に行こう
2005/09/11(日) 02:10:500799788
2005/09/11(日) 02:19:01これから perldoc perlmod 見て勉強します。
0800795
2005/09/11(日) 04:52:54吊ってきます('A`)
0801788
2005/09/11(日) 05:54:48「BEGINブロックの中に入れてやれ」
の意味がようやくわかりました。
main.pl
1: use strict;
2: my $PI=3.14;
3: require 'func.pl';
4: sub main_hoge{print "main:",$PI};
5: main_hoge();
6: req_hoge();
func.pl
1: sub req_hoge{ print " req:", $PI }
2: 1;
だと
main:3.15 req:
となります。
main.pl の2行目を
BEGIN{ my $PI=3.14 };
にしたら $PI の有効範囲は BEGIN ブロックの中になるため
Global symbol "$PI" requires explicit package name at main.pl line 4.
となります。
BEGIN{ $main::PI=3.14 };
としても Global symbol "$PI" requires explicit package name at main.pl line 4.
0802788
2005/09/11(日) 05:55:32BEGIN{ $main::PI=3.14 };
my $PI=3.14;
と、2回書いてやれば
main:3.14 req:3.14
となりました
BEGIN ブロックの中で $main::PI を定義していても、
my $PI=3.14; を書かなければエラーになるのが少し不思議な気がします。
0804名無しさん@そうだ選挙に行こう
2005/09/11(日) 06:59:500805名無しさん@そうだ選挙に行こう
2005/09/11(日) 07:28:18BEGIN{ $main::PI=3.14 };
はBEGINブロックが実行されるタイミングで
$main::PIに3.14を代入するだけで、以後に
出現する裸の$PIが$main::PIのことであると
いうような意味はどこにもないよ。スコープ
とかmyとかourとかパッケージとか勉強し直す
ことをお勧めする。
複数のファイルから同じ定数を使いたければ
[MyConstant.pm]
use strict;
package MyConstant;
use Exporter qw(import);
@EXPORT = qw(PI);
use constant PI => 3.14;
1;
と用意しといて各ファイルからは
[main.pl]
use strict;
use MyConstant;
print PI;
とかいう風にuseして使うのが普通。
0806名無しさん@そうだ選挙に行こう
2005/09/11(日) 07:43:45http://cms.blog.livedoor.com/cms/rebuild/exec?blog_id=***&command=***
にアクセスすれば勝手にやってくれる
blog_id,commandのvalueは「ブログに設定を反映(再構築)」のソースみればオッケー^^
0807788
2005/09/11(日) 08:28:48ありがとうございます。
main ブロックで使用されている裸の $PI が $main::PI だと
思っていたんですけど、どうやら違うみたいですね。
試しに
BEGIN{ $main::PI=3.14 };
my $PI=3.15;
とやると
main:3.15 req:3.14
となったので、何か範囲が違うということはわかりました。
どこまで範囲が及ぶのか、と、その理由 がわからないので、
これから勉強してわかるようになるつもりです。
(今までグローバル変数しか使ってなかったのであまり気にしたことがなかったんです)
カレントディレクトリにMyConstant.pm を保存し、早速使用してみました。
"import" is not exported by the Exporter module at MyConstant.pm line 3
と出るんですけど、自分の環境がおかしいんでしょうか?
perl, v5.6.1( ActivePerl build 638 )なんですけど。
0808名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:35:070809名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:13:02単にourにすればいいと思うんだがなぁ…。
この結果見て考えなされ。
-------------
use strict;
$main::PI= 3.14;
$main::PI2= 3.14;
my $PI;
our $PI2;
print "PI : $PI"; # PI :
print "PI2 : $PI2"; # PI2 : 3.14
0810名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:24:13くわしく
0811名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:27:04とか、完結してない正規表現を入れて
$hoge=~s/$hoge1/$hoge2/;
という命令をすると、
500エラーになってしまいます。
置換の段階で、どうしたら500エラーを回避できますか?
$hoge=~s/$hoge1/$hoge2/;
のあとに、
dieやらwarnやら入れてもうまくいきませんでした。
0812名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:27:10<わし<
0813名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:32:24eval{}を使うのはどうですか
0814名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:47:40くわしくおねがいします
0815名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:52:37eval{$hoge =~ s/$hoge1/$hoge2/;};
print $@ if($@); #エラーメッセージをあれば表示
0816名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:56:58やってみます
0817名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:06:11やってみます
0818名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:28:02メタ文字をquoteすればOK。
$hoge1 = quotemeta("{");
0819名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:42:10$hoge1 = "\{";じゃだめなの?
0820名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:46:10それでもいいよ。
0821名無しさん@そうだ選挙に行こう
2005/09/11(日) 16:52:26perl.exeじゃ、\aを出力すればよかったけどwperlだと音がならない
0822名無しさん@そうだ選挙に行こう
2005/09/11(日) 16:54:01$|=1;
してもバッファリングするんですよ。STDOUTはバッファリングしないようになりますが。
Winです。
0823名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:12:00selectで一旦変えてやってる?
$oldfh = select(OUT); $| = 1; select($oldfh);
0824名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:40:570825名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:56:40だっさ
perlなんだからもうちょい”らしく”かこうぜ
0826名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:18:520827名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:26:26かっこよさより判りやすさ重視でいいだろ。マターリしる。
0828名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:32:37ひどい・・・
0829名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:59:240830名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:02:050831名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:05:2420:00から
0832名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:05:26一応・・・perlfuncからのほぼコピペですよと
確かにらしくないというのは同意するけどね
0833名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:19:350834名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:23:31ガムテープで張り付けてあるエンジンとか、
ロープで縛り付けてある翼とか、
格好悪いかもね。
0835名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:25:500836名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:50:59むしろ有名だから一瞬でわかってもらえると思うけどな。
0837名無しさん@そうだ選挙に行こう
2005/09/11(日) 20:17:040838名無しさん@そうだ選挙に行こう
2005/09/11(日) 20:23:010839名無しさん@そうだ選挙に行こう
2005/09/11(日) 21:08:38俺、マジで分からんわ。みんな一瞬で分かるようなもんなの?
どのコード?
0840788
2005/09/11(日) 22:57:26自分が基本的なことがわかってない上、その事を隠そうともせず
恥をさらしてたことがわかりました。スマソ。
use strict した場合のグローバルな定数を使う方法としては
(1)各ファイルの先頭の方に my $PI=3.14を記述する
(2)use const PI => 3.14 (内部では sub PI{ return 3.14 })
(3)our $PI=3.14 でグローバル化
(4)モジュール化してuseする ( 805さんの方法 )
の方法がある。 自分にとっては our 使うのが簡単でよさそうです。
0841788
2005/09/11(日) 22:58:12ただ、せっかく805さんにコードを書いてもらっているのですから、
これのやり方を学ばないと805さんに申し訳ないと思うのです。
805 のモジュールはそのままコピペだとエラーが出ました。
●perl 5.8.7 の場合
use Exporter qw(import);
の次の行に
use vars qw(@EXPORT);
を追加すると動くようになりました
●perl 5.6.1 の場合
use strict;
package MyConstant;
require Exporter ;
use vars qw( @ISA @EXPORT );
@ISA = qw(Exporter);
@EXPORT = qw(PI);
use constant PI => 3.14;
1;
で動きました。
まだ勘違いしてるところがあったら、ビシビシつっこんでください。
0842名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:19:42$PI = 3.14;
の二行でサッと済む訳なので、わざわざ複数行に書かんでも・・・
勉強しようという姿は素晴らしいのだが、時には簡略するという術もしないとだめよん。
0843名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:20:12エラーログは以下の通りです。
syntax error at ./log.cgi 行番号 18, near "};"
Unmatched right curly bracket at ./log.cgi 行番号 41, at end of 行番号
syntax error at ./log.cgi 行番号 41, near "}"
Compilation failed in require at C:\check.cgi 行番号 54.
Perlへのリンクです。
ttp://www5e.biglobe.ne.jp/~kokotubo/upbbs/img/90.txt
0844842
2005/09/11(日) 23:20:25$PIじゃ駄目だよね・・・orz
0845名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:29:0217行目に記号間違い
36行目に}が多い
52行目に"が足りない
60行目 '''' なんだこりゃ
もうねアボカド、バナナかと
0846名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:34:54主な問題は>>845が言ってるからいいとして・・・
print "</body></html>\n";
↑<body>は何処行ったの?
後 sub error{}について。
&error('0'); で呼び出してるみたいだが、'0'を引数にしてやる必要性なくないか?
&error; 又は &error(); で良いような。
汎用性を持たせたいなら引数にエラーメッセージを渡してやるなりとあるが、それはまた別の話
0847名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:36:16全てCで書け
0848名無しさん@そうだ選挙に行こう
2005/09/11(日) 23:38:40'0' を引数にするのは、
('0') が顔に見えるからじゃないかな。
0849788
2005/09/11(日) 23:41:52ありがとうございます。
すでに840にも書いているように、自分も our 使おうと思ってます。
805さんが「useして使うのが普通」とかおっしゃっているので、
自分の弱点克服のためにも勉強してみたのです。
(あんまり普通じゃないんでしょうか?)
Perl にはいろんなやり方があるので、場合によって読みやすさや、汎用性等メリット、デメリットを
考慮しながらやり方を選択出来るようになればいいなぁ。と思ってます。
0850デフォルトの名無しさん
2005/09/11(日) 23:56:41ourで変数宣言しないとmainパッケージの
範囲でしか適用されないの?
0851デフォルトの名無しさん
2005/09/11(日) 23:59:330852デフォルトの名無しさん
2005/09/11(日) 23:59:35宣言された変数がどの程度の範囲まで通用する物かはmyはlocal等に関するマニュアルでも読め。
0853デフォルトの名無しさん
2005/09/12(月) 00:02:17レスありがとうございます。
指摘されたとこを修正したつもりなんですが、エラーとなってしまいます。
もう自分でも何がなんだかわからなくなってしまいました。
どうかお力を貸していただけませんか。
0854デフォルトの名無しさん
2005/09/12(月) 00:03:27指摘されてるのはどれも基本中の基本な気がするのですが・・・
0855デフォルトの名無しさん
2005/09/12(月) 00:05:110856デフォルトの名無しさん
2005/09/12(月) 00:10:04レスありがとうございます。
指摘されたとこを修正したつもりなんですが、エラーとなってしまいます。
もう自分でも何がなんだかわからなくなってしまいました。
どうかお力を貸していただけませんか。
リンク貼り忘れましたm(__)m
ttp://www5e.biglobe.ne.jp/~kokotubo/upbbs/img/91.txt
0857デフォルトの名無しさん
2005/09/12(月) 00:13:49答えたらそんな質問で埋め尽くされる。
答えて欲しかったらhttp://www.hatena.ne.jp/でポイント使って聞けば?
みんな親切に教えてくれるよ
0858デフォルトの名無しさん
2005/09/12(月) 00:14:25とりあえず動かしてみたが処理自体は出来ている。俺が言えるのはただそれだけだ
0859デフォルトの名無しさん
2005/09/12(月) 00:25:57まともに動かないです(汗
accsesslog.txtも作られないし。。。
Content-type: text/html
記録ファイルの入出力にエラーが発生しました.
とブラウザに表示が出ます。
0860デフォルトの名無しさん
2005/09/12(月) 00:31:250861デフォルトの名無しさん
2005/09/12(月) 00:59:51マジ オタクっぽいよ
0862デフォルトの名無しさん
2005/09/12(月) 01:10:510863デフォルトの名無しさん
2005/09/12(月) 01:23:51Perlのエラー出力
Name "main::PLOG" used only once: possible typo at tmp.pl line 50.
Name "main::act" used only once: possible typo at tmp.pl line 28.
Name "main::for" used only once: possible typo at tmp.pl line 21.
Name "main::isdst" used only once: possible typo at tmp.pl line 3.
Name "main::agent" used only once: possible typo at tmp.pl line 22.
Name "main::year" used only once: possible typo at tmp.pl line 3.
Name "main::yday" used only once: possible typo at tmp.pl line 3.
tmp.pl syntax OK
となっております。
どなたか分かる人、力をお貸しください。
今日はこのへんで。
0864デフォルトの名無しさん
2005/09/12(月) 01:25:00英語の勉強しる。
0865デフォルトの名無しさん
2005/09/12(月) 01:25:190866デフォルトの名無しさん
2005/09/12(月) 01:26:10どれも、一度しか使ってない変数だけど、打ち間違いじゃねぇか?ってメッセージ。
0867デフォルトの名無しさん
2005/09/12(月) 01:29:10http://pc8.2ch.net/test/read.cgi/tech/1037383722/397-
は放置かよ・・・
0868デフォルトの名無しさん
2005/09/12(月) 01:36:45放置もなにも、スレが違う。
0869デフォルトの名無しさん
2005/09/12(月) 01:51:19マルチだと言っとるんだ
0870デフォルトの名無しさん
2005/09/12(月) 01:55:23おまいが使っているOSもマルチタスクちゃんうんかい?
0871デフォルトの名無しさん
2005/09/12(月) 02:06:050872デフォルトの名無しさん
2005/09/12(月) 02:48:120873デフォルトの名無しさん
2005/09/12(月) 04:46:08なんかしらんが、乙。
0874デフォルトの名無しさん
2005/09/12(月) 04:52:200875デフォルトの名無しさん
2005/09/12(月) 08:32:21コンパイラなんて上等なもんじゃないよ、ここのクソ回答者はw
0876デフォルトの名無しさん
2005/09/12(月) 10:58:15ってなんですか?
0877デフォルトの名無しさん
2005/09/12(月) 11:15:310878デフォルトの名無しさん
2005/09/12(月) 11:16:210879デフォルトの名無しさん
2005/09/12(月) 12:12:49いまちょっと仕事が暇だから、釣られてやろう。
http://www.media-k.co.jp/jiten/
ここを端から端まで100回読めば、少しは賢くなるぞ。
0880デフォルトの名無しさん
2005/09/12(月) 12:19:24このスレで、まともなアドバイスを得たければ、ソースを短くしろ。
例えば、この最初の部分....
>($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time +9*60*60);
>if ($month < 10) { $month = "0$month"; }
>if ($mday < 10) { $mday = "0$mday"; }
>if ($sec < 10) { $sec = "0$sec"; }
>if ($min < 10) { $min = "0$min"; }
>if ($hour < 10) { $hour = "0$hour"; }
>$month = ($mon + 1);
>$y0="日"; $y1="月"; $y2="火"; $y3="水"; $y4="木"; $y5="金"; $y6="土";
>$youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6) [$wday];
>$date_now = "$month\/$mday($youbi) $hour\:$min:$sec";
....ここまでの処理で自分が望んでいるような$date_nowが得られたかどうか
確認せよ。今日の日付を「09/12(月)」の形で得たいのなら、望んでいる
通りのものは得られないだろう。なぜ得られないのか自分で考えて、解らなければ
この部分のみを挙げて質問すればいい。sprintfを使え、という親切なアドバイスを
も得られるかもしれん。
自分が望んでいるような$date_nowが得られたならば、この部分を削って、
ソースを短くしろ。このようにして、問題のある部分を顕在化した数行程度の
ソースを作れば、まともなアドバイスが得られるだろう。
0881デフォルトの名無しさん
2005/09/12(月) 12:20:300882デフォルトの名無しさん
2005/09/12(月) 12:35:09いかにもKENTの負の遺産って感じの内容。
0883デフォルトの名無しさん
2005/09/12(月) 12:40:56プログラミングを語りたいならまず20万行書いてから
http://pc8.2ch.net/test/read.cgi/tech/1124748243/
0884デフォルトの名無しさん
2005/09/12(月) 12:52:28現在こんな無駄に長いコード書かんだろ。
0885デフォルトの名無しさん
2005/09/12(月) 15:01:33指摘されたようにソースを短くしたら、
Error 500
CGI エラー - 標準出力に何も出力されていません。
となります。
0886デフォルトの名無しさん
2005/09/12(月) 15:10:06それに呼応するような、スカラー変数と配列変数を7つずつ作りたいんですがどういう方法がありますか?
$hoge[$i]とか@hoge[$i]では、べつの意味になってしまって困っています。
0887デフォルトの名無しさん
2005/09/12(月) 15:57:49やりたいことがよくわからん。
別の名前を持った変数を作りたいなら、${"hoge$i"}とか配列も同様に。ただしお勧めできないな。
それとも、やりたいのはこういうことかな。
my @hoge;
$hoge[$i] = {SCALER => 'hage', ARRAY => ['foo', 'bar', 'baz']};
print $hoge[$i]{SCALER}, $hoge[$i]{ARRAY}[0];
0888デフォルトの名無しさん
2005/09/12(月) 16:13:35use strict; を使ってるなら、
for (0..6) {
no strict 'refs';
${"hoge$_"} = 1;
}
print $main::hoge0;
使ってないなら
for (0..6) {
${"hoge$_"} = 1;
}
print $hoge0;
---
887も書いてるが、上の方法はあまりお勧めではない。
配列やハッシュの要素にすると、一括処理しやすいというメリットもあるし。
887の下のようにハッシュを使うのをおすすめ。
0889デフォルトの名無しさん
2005/09/12(月) 17:39:170890デフォルトの名無しさん
2005/09/12(月) 18:28:560891デフォルトの名無しさん
2005/09/12(月) 19:30:01やって、6000行にシュリンクしたことがある。
0892デフォルトの名無しさん
2005/09/12(月) 19:35:19人生で通算20万行って話では?
0893デフォルトの名無しさん
2005/09/12(月) 19:45:37コーディングするだけなら一日2000行は書ける
0894デフォルトの名無しさん
NGNGmap
sprintf(qq|%02d\n|),
(0 .. 99);
無駄に行数を稼いでみるテスツ。
0895デフォルトの名無しさん
2005/09/12(月) 20:02:14いや、例の20万行スレへの誤爆だろ。
0896デフォルトの名無しさん
2005/09/12(月) 20:05:52でもその後しばらくしてくるとやる気失って1日10行書くのも億劫になる
0897デフォルトの名無しさん
2005/09/12(月) 20:29:39↓
プログラミングを語りたいならまず20万行書いてから
http://pc8.2ch.net/test/read.cgi/tech/1124748243/
0898デフォルトの名無しさん
2005/09/12(月) 20:59:160899デフォルトの名無しさん
2005/09/12(月) 21:08:45心の優しい人、間違っている構文をチェックしてください。
もう自分の力じゃどうにも出来ないで困っています。
ttp://www5e.biglobe.ne.jp/~kokotubo/upbbs/img/93.txt
0900デフォルトの名無しさん
2005/09/12(月) 21:11:52これからPerlを勉強しようとしてるのですが、
パッケージをインストールしようとしたのですが下のようになります。
win32-apiをインストールします
Error: No valid repositories:
Error: 500 Can't connect to ppm.ActiveState.com:80(connect: Unknown error)
zip形式でパッケージが入手できると聞いたのですが、どれが目的のパッケージかわかりません、
ご存知の方教えててください。
0901デフォルトの名無しさん
2005/09/12(月) 21:14:08自分でやれって事で終了だったでしょうに…。
ここの板の人達をデバッガに使うつもり?
ちゃんとしたエディタでも使って、自分でやんなよ。
他の人に頼ってたら、いつまで経ったも書けないぞ。
0902デフォルトの名無しさん
2005/09/12(月) 21:25:29終了だったんですか?
別にそんなつもりはないですけど、力を貸して欲しいんです。
ではこの板は何のために存在するんですか?
そもそも覗いてて、そうゆうレスしか返さない人は意味ないと思います。
指摘されて習得することも多いと思います。
だからこうやって罵られても投稿するんです。
自分は低脳の猿なんで温かく見守ってください。
0903デフォルトの名無しさん
2005/09/12(月) 21:26:23問題が再現する最短のコードのみを書くべし。
0904デフォルトの名無しさん
2005/09/12(月) 21:29:090905デフォルトの名無しさん
2005/09/12(月) 21:29:37used only once: possible typo でググったら一発で解決なのだわ
0906デフォルトの名無しさん
2005/09/12(月) 21:34:03used only once っていう英文の段階で"何かが1回しか使われてないのか?"くらい判れ。
…いや、それが分からなかったとしても "tmp.pl syntax OK"と正常終了していることぐらい判れ。
自分を低脳だと言うのはどうでもいいが、それすら読めなきゃ同類にされる猿がかわいそうだ。
0907デフォルトの名無しさん
2005/09/12(月) 21:39:38http://pc8.2ch.net/test/read.cgi/tech/1037383722/
で待ってるからここにはもう書き込みするな。
0908デフォルトの名無しさん
2005/09/12(月) 21:42:47警告の意味はわかってるんですが、tmp.pl syntax OK
と出ているのに正常動作しないから困っているんです。
ソースにも書いてあるとおり「accesslog.txt」は生成されないし、
サーバー側に送って実行しても
記録ファイルの入出力にエラーが発生しました.
となってしまいます。
パーミッションも問題ないです。
0909デフォルトの名無しさん
2005/09/12(月) 21:47:06まあ、一つだけヒントをやろう。
4行目で、既に間違ってるぞ。
0910デフォルトの名無しさん
2005/09/12(月) 21:47:21つうかメモ帳にコピってperl走らせてやりたいが、00xx:と行書いてあるの取り除くのかったりいよ。
0911デフォルトの名無しさん
2005/09/12(月) 21:49:26http://pc8.2ch.net/test/read.cgi/tech/1037383722/
ここで質問すべし。
0912デフォルトの名無しさん
2005/09/12(月) 21:49:40つ [colrm 1 6]
プログラマなら、これくらいのツールは用意しとけよ。
0913デフォルトの名無しさん
2005/09/12(月) 21:52:23print "Content-type: text/plain\n\n正常動作";
__DATA__
3行目の前にこの2行を書いてみるとエラーも出ずに正常動作するよ
注意点は 行頭に空白を入れないこと。
0914デフォルトの名無しさん
2005/09/12(月) 21:52:35自分がPerl使う時はTeraPadあたりでやるから必要ないのよ。
要するに書けたり置換出来たりすればいいんであって、colrmとかを使う必要を感じない。
企業とかでチーム組んで書いてるとかじゃなくて個人で書いてるだけだし。
ましてや他人のソース見るために入れるのはめんどい
0915デフォルトの名無しさん
2005/09/12(月) 22:10:25ご迷惑をおかけしたみなさん、及びレスをくれた方々に本当に感謝します。
0916デフォルトの名無しさん
2005/09/12(月) 22:11:120917デフォルトの名無しさん
2005/09/12(月) 22:13:35数十秒でかけるでしょ。
0918デフォルトの名無しさん
2005/09/12(月) 22:13:57おまえまじあたまいいな
0919デフォルトの名無しさん
2005/09/12(月) 22:14:01> ではこの板は何のために存在するんですか?
http://pc8.2ch.net/tech/
> この板はプログラムを作る人のための板です。
この板の全てのスレが質問スレだなどと勘違いしないでくれよ。
このスレは確かに質問スレだが、お前のしていることは質問じゃない。少なくともそう見えない。
もう少し質問の仕方を勉強するべきだと思うよ。
長文失礼
>>914 おまいは本当にPerl使いかと(ry
$ perl -pe "s/^\d+:\s?//"
0920デフォルトの名無しさん
2005/09/12(月) 22:37:06> 5.8.6.811-MSWin32-x86-122208.msi
ちょっと待った。ActivePerlだよな。何故古いバージョンなんだ…最新版は5.8.7.813ですよ
まあ変な勘ぐりは置いておくとして…
自分で書いてるとおりwin32-apiがパッケージ名だから、これを
ttp://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/
から探してきて(Win32-API-0.41.zipね)、展開。
そして、カレントディレクトリをppdファイルがあるディレクトリに移動して、
ppm install Win32-API.ppd
でいけるはず。
0921デフォルトの名無しさん
2005/09/12(月) 22:59:34>>848氏が指摘してくれた姿勢を尊重して調整してみたが、こういう事がやりたいのか?
exit if eval <<'__END__';
$_=$_>9?$_:qq;0$_;for ($sec,$min,$hour,$mday,$mon,$year,$wday)
=gmtime time+9*60*60;$date_now=
join undef,qw. 01 , 02 , 03 , 04 , 05 , 06 , 07 , 08 , 09 , 10 , 11 , 12.
[$mon<<1],q|/|,@{[$mday]},qw.
(日) (月) (火) (水) (木) (金) (土) (^_^).
[$wday],qq. $hour:$min:$sec.
;m<^(\D+)(\d)>m and $' and $$1=$2 ? $ENV{(HTTP_)[$2-1].$'} : $' for via1VIA,q(-_-),
xfor1X_FORWARDED_FOR,for1FORWARDED,agent1USER_AGENT,addr2REMOTE_ADDR,
q,access_log0./00accesslog.txt,,log01,rescue01000;
do { $_=$a if 4 eq split q,\., and local $a=gethostbyaddr pack(C4,@_),2}
for $host=$addr,$xfor_name=$xfor;
$trueip = $_ for $via and $xfor or $addr;
@linebox =<< "$access_log";
$date_now,$act,$addr,$host,$xfor_name,$trueip
$access_log
;open LOG,qq,<$access_log, and push @linebox,<LOG> or error ('0');;;
;splice @linebox,$rescue-1
;open LOG,qq,>$access_log, and print LOG @linebox or &error qw (;_;)
;#〜中略〜 正常メッセージ
;exit q(^_^)
;sub error {
#〜中略〜 異常メッセージ
!!!!!shift() ? return : exit length (T_T);
}
__END__
0922デフォルトの名無しさん
2005/09/13(火) 00:04:53>>902
>指摘されて習得することも多いと思います。
だからみんな親切に指摘してあげてるじゃない。
質問の仕方が間違ってるって。
0923デフォルトの名無しさん
2005/09/13(火) 01:17:01↓インスパイヤ
http://viploader.net/src/viploader3656.jpg
http://www.imgup.org/file/iup83862.jpg
avexのロゴにインスパイアされて
新たなオリジナリティーを加えてロゴ化したものですが、
avexのロゴマークを使用されることを何ら制限するものではございません。
何卒ご理解のほどよろしくお願いいたします。
0924デフォルトの名無しさん
2005/09/13(火) 01:18:43メモ帖から乗り換えようと思っているのですが
Perlのキーワードを着色してくれたり色々あって迷っています
0925デフォルトの名無しさん
2005/09/13(火) 01:27:590926デフォルトの名無しさん
2005/09/13(火) 01:40:230927デフォルトの名無しさん
2005/09/13(火) 01:47:25>>479
同様の質問に答えた覚えがあったから過去ログさかのぼってみたらPart16でも出てるな。参照不能だけど
>>925
何か学校でいやな事でもあったのか?
0928デフォルトの名無しさん
2005/09/13(火) 02:28:01emacs
0929デフォルトの名無しさん
2005/09/13(火) 03:26:280930デフォルトの名無しさん
2005/09/13(火) 03:56:38vi
0931デフォルトの名無しさん
2005/09/13(火) 03:57:560932デフォルトの名無しさん
2005/09/13(火) 04:45:49ワードパッド
0933デフォルトの名無しさん
2005/09/13(火) 04:48:190934デフォルトの名無しさん
2005/09/13(火) 06:29:490935デフォルトの名無しさん
2005/09/13(火) 11:51:29オレは、キミのプログラムも、相当にキモイと感じるのだが。
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
$mon++;
@dayofweek = qw[(日) (月) (火) (水) (木) (金) (土) (^_^)];
$date_now = sprintf("%02d/%02d%s %02d:%02d", $mon, $mday, $dayofweek[$wday], $hour, $min);
0936デフォルトの名無しさん
2005/09/13(火) 12:48:540937デフォルトの名無しさん
2005/09/13(火) 13:17:350938ヽ(´ー`)ノ ◆.ogCuANUcE
2005/09/13(火) 15:08:080939デフォルトの名無しさん
2005/09/13(火) 15:26:04>>921 は明らかにワザとだと思うが…
0940デフォルトの名無しさん
2005/09/13(火) 16:30:33文字列を指定する際、シングルクオテーションで
挟むのが良いのでしょうか?ダブルクオテーション
で挟むのが良いのでしょうか?
0941デフォルトの名無しさん
2005/09/13(火) 16:35:51完全に好みの問題だと思うが、漏れは必要なければダブルクォーテーションは使わんな。
エスケープ文字の検査の処理が余計に掛かりそうな気がして・・・実際のところはどうか知らないけれど
0942デフォルトの名無しさん
2005/09/13(火) 16:47:36おれも必要なければシングルクォーテーションを使ってる。
文字列中の変数展開検査に関しては941と同じ理由なのと、
明示的に変数展開をしないことを示すため。
まぁ、どちらを使うかは趣味の問題だと思うよ。
0943デフォルトの名無しさん
2005/09/13(火) 17:28:47クォート打つのめんどいから囲んでない。
必要なトコはダブルで。
ちなみにシングルでも検査はされるし、
展開が無けりゃ速度は変わらん。
0944941
2005/09/13(火) 17:45:56> ちなみにシングルでも検査はされるし、
'ho\'ge'こういうのありだったんだ。知らなかった
あと、ハッシュのキーに関しては漏れも囲まないな。
打つのが面倒なのもあるが、何より自分の主観的にそっちのほうが格好良いと思ってるから。
0945デフォルトの名無しさん
2005/09/13(火) 23:05:52後半2行にショック…
0946デフォルトの名無しさん
2005/09/14(水) 22:02:07クォートは打つのがめんどくさいから => とか qw()とか使いまくり。
0947デフォルトの名無しさん
2005/09/14(水) 22:53:56qw だと無駄な処理発生しないん?
0948デフォルトの名無しさん
2005/09/15(木) 00:11:225.005 ぐらいまでは
my @array = qw(foo bar baz);
というコードはコンパイル時に
my(@array) = split(/\s+/, 'foo bar baz', 0);
というコードへ変換されていたが、今は
my(@array) = ('foo', 'bar', 'baz');
へ最適化されるので気にしなくていい。
0949デフォルトの名無しさん
2005/09/15(木) 02:04:41マジっすか。 Perlのコード最適化スレないんかの
0950デフォルトの名無しさん
2005/09/15(木) 06:57:02% perl -MO=Deparse ファイル名
して確認
0951デフォルトの名無しさん
2005/09/15(木) 08:13:40メモリは普通にあいてる。
winXPです
0952デフォルトの名無しさん
2005/09/15(木) 08:57:29全然関係ないけどちょっと気になったのですが、
my @arrayとmy(@array)の括弧の有り無しの違いは何ですか?
0953デフォルトの名無しさん
2005/09/15(木) 09:42:510954デフォルトの名無しさん
2005/09/15(木) 14:17:46>>950
なぜ、自分で調べよう、試そうとしないんだろう。
0955デフォルトの名無しさん
2005/09/15(木) 14:43:49> なぜ、自分で調べよう、試そうとしないんだろう。
まあまあ。
どうせリアルで友達いないんだろうから、せめてネットの中で
他人とのコミュニケーションを求めようとしてるんだろ。
桶愚とおんなじだ。生暖かく見守ってやれ(w
0956デフォルトの名無しさん
2005/09/15(木) 15:23:30むしろ>>955みたいなネチっこい奴のほうが「リアルで友達いない」タイプに見えるなぁ。
自分にとって「友達の有無」が痛点だから、煽りにも真っ先に混ざっちゃいました、って感じ。
0957デフォルトの名無しさん
2005/09/15(木) 16:17:110958デフォルトの名無しさん
2005/09/15(木) 17:00:060959デフォルトの名無しさん
2005/09/15(木) 17:06:17自分に友達がいないことをばらしている馬鹿
0960デフォルトの名無しさん
2005/09/15(木) 17:25:280961デフォルトの名無しさん
2005/09/15(木) 18:40:150962デフォルトの名無しさん
2005/09/15(木) 18:47:240963949
2005/09/15(木) 19:02:13あ、展開されてるかどうかの意味ではなくて、
こういう perl向けの最適なコーディングの事。
例えば、
my @week = qw(日 月 火 水 木 金 土);
を、パッケージの頭で宣言しておくか、
関数内で宣言するかで、ひょっとして関数呼ばれる度に
代入されてんのか?実はコンパイラが同等へ最適化してる?
みたいな実行効率の疑問が出てくる。
そんなの、まとまってないかなぁとか思って。
(スレじゃなくても サイトでもいいか)
0964デフォルトの名無しさん
2005/09/15(木) 19:05:01ソース読んだりしてるのかなぁ・・・・。
0965デフォルトの名無しさん
2005/09/15(木) 19:12:49> 自分で調べる方法を教えて欲しいんだが、ベンチぐらいしか思いつかない。
何を自分で調べる方法?
0966デフォルトの名無しさん
2005/09/15(木) 20:39:35笑
0967デフォルトの名無しさん
2005/09/15(木) 20:55:18実行時にリストに変換される。
実行効率は同じ@perl, v5.8.4 built for i386-linux-thread-multi
0968デフォルトの名無しさん
2005/09/15(木) 21:02:100969デフォルトの名無しさん
2005/09/15(木) 21:41:27問題が再現する小さいサンプルを載せろ
0970デフォルトの名無しさん
2005/09/15(木) 22:11:47if($p=fork) {
next;
} elsif(defined($p)) {
sleep 10000;
exit;
} else {
print("$i\n");
<STDIN>;
}
}
WindowsなのでUnix系OSと少し違うと思いますが
0971デフォルトの名無しさん
2005/09/15(木) 22:26:49perlでoracleからbind_paramを使用して
値を取得したいのですがうまくいきません。
$AAA = 'hoge1';
$BBB = 'hoge2';(実際はWEB上からの入力値)
SQL文は"select * from TBL whrere AAA = :sid and BBB :hid;"
$sh->open();
$sh->bind_param(':sid',$AAA);
$sh->bind_param(':hid',$BBB);
$sh->execute();
$sh->execute();でエラー
エラー内容は型があってないとのことです
debugすると
select * from TBL whrere AAA = 'hoge1' and BBB = "hoge2"と出力されており、、
$BBBにダブルクォーテーションがついてしまいます。
直打ちで'hoge2'とすれば問題なく取得できました。
どうすればダブルクォーテーションからシングルダブルクォーテーションに
なるのでしょうか?
どなたかよろしくお願いします。
0972デフォルトの名無しさん
2005/09/15(木) 22:28:05SQL文は"select * from TBL whrere AAA = :sid and BBB = :hid;"
です。
0973デフォルトの名無しさん
2005/09/15(木) 22:53:120974デフォルトの名無しさん
2005/09/15(木) 22:57:43>エラー内容は型があってないとのことです
とか書かないで出力されたエラーメッセージをありのままに
書けって習わなかった?
0975デフォルトの名無しさん
2005/09/15(木) 23:40:37SQL文は"select * from TBL where AAA = :sid and BBB = :hid;"
です。
出力されたエラーは
DBD::Oracle::st execute failed: ORA-12704:
(DBD ERROR: error possibly near <*> indicator
です。
これでわかることがありましたら教えてください。
0976デフォルトの名無しさん
2005/09/16(金) 22:21:22丸一日レスないし。
DB板へ行って訊いたら?
0977デフォルトの名無しさん
2005/09/16(金) 23:50:00"select * from TBL where BBB = :hid and AAA = :sid;"
ってBBBを前に書くとどうなる?
0978デフォルトの名無しさん
2005/09/17(土) 10:56:220979デフォルトの名無しさん
2005/09/17(土) 11:20:07ここに何か書いてない?
ttp://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfork.pod
0980デフォルトの名無しさん
2005/09/17(土) 11:40:48Larry Wallって18年もperl書き続けてるのか
0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
2005/09/17(土) 14:09:06次スレよろ。
0983デフォルトの名無しさん
2005/09/17(土) 14:30:58Larry Wallってのもたいしたことないよね
0984デフォルトの名無しさん
2005/09/17(土) 18:04:24> forkで子プロセス作りまくったら数十個で作れなくなるんだけどどうにかならないの?
> メモリは普通にあいてる。
デスクトップヒープ領域が足りなくなった可能性がある。
http://support.microsoft.com/default.aspx?scid=kb;ja;JP126962
「デスクトップ アプリケーションのヒープを増やす」
ここにある方法で増やせるようだが、OSの記述がWindows2000までなので、
XPにも使えるのかどうかは解らん。
子プロセスではなく、スレッドが使えるのならスレッドを使ったほうが
いいかもしれない。(実はオレもスレッドのことはよく解らんし使った
こともないが)
0985デフォルトの名無しさん
2005/09/17(土) 18:14:57use DBD::Oracle qw(:ora_types);
なり
use DBI qw(:sql_types);
なりして
bind_paramにアトリビュート設定してみたら?
0986デフォルトの名無しさん
2005/09/17(土) 23:11:00Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
0987デフォルトの名無しさん
2005/09/17(土) 23:11:39Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
0988デフォルトの名無しさん
2005/09/17(土) 23:12:350989デフォルトの名無しさん
2005/09/17(土) 23:19:13Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
0990デフォルトの名無しさん
2005/09/17(土) 23:24:440991デフォルトの名無しさん
2005/09/17(土) 23:53:200992デフォルトの名無しさん
2005/09/18(日) 01:18:59Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
0993デフォルトの名無しさん
2005/09/18(日) 01:20:07Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
0994デフォルトの名無しさん
2005/09/18(日) 01:52:38教えてあげるから次スレ立ててくだされ。
HTTP なり FTP なり ssh なり メール なり他の通信路なりで
やりとりすればOK。
0995デフォルトの名無しさん
2005/09/18(日) 02:31:25http://pc8.2ch.net/test/read.cgi/tech/1126977805/l50
独断でテンプレを多少弄った。
0996デフォルトの名無しさん
2005/09/18(日) 03:04:040997デフォルトの名無しさん
2005/09/18(日) 03:05:440998デフォルトの名無しさん
2005/09/18(日) 03:06:510999デフォルトの名無しさん
2005/09/18(日) 03:07:361000デフォルトの名無しさん
2005/09/18(日) 03:08:13GO! → http://pc8.2ch.net/test/read.cgi/tech/1126977805/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。