Perlについての質問箱 18箱目

1デフォルトの名無しさん
"The duct tape of the Internet" こと、Perlについての質問箱です。
"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
2デフォルトの名無しさん:2005/07/20(水) 05:23:09
3デフォルトの名無しさん:2005/07/20(水) 05:24:24
4デフォルトの名無しさん:2005/07/20(水) 05:30:09
[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: 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
5デフォルトの名無しさん:2005/07/20(水) 05:35:48
6デフォルトの名無しさん:2005/07/20(水) 07:14:07
>>4
[プログラミング自体の経験が無い奴はまずココを読め] (移転)
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/
7デフォルトの名無しさん:2005/07/20(水) 19:40:03
ASP.Net、PHP、Ruby、Pythonの連合軍にやられて死滅寸前のPerl公国
8デフォルトの名無しさん:2005/07/20(水) 23:51:45
perl5はもはやsedやawkと同じぐらいUNI*Xの底辺まで沈みつつある。
あと10年もすれば流行りの言語を尻目に枯れ果てて/binにまで落ち、
ニッポンの勘定系のバッチでも使えるようになっているだろうさ。

9デフォルトの名無しさん:2005/07/21(木) 00:37:10
$a="\x83\x40";

これにインクリメントして$a="\x83\x41"にしたいのですができません。
どうすればいいのでしょうか?

ちなみに

$x="\x83";$y="\x40";$a=$x.$y;

はうまくいきますが

$x="\x83";$y="\x";$z="40";$a=$x.$y.$z;

はだめです。シングルクオーテーションや.を+にしたりしましたがだめでした。
10デフォルトの名無しさん:2005/07/21(木) 00:41:47
open(FH,"sample.txt");
$test = <FH>;
@test = <FH>;
close(FH);

$test=<FH>は最初の一行だけ読み込み、@test = <FH>は全行読み込むと知ったのですが、
"sample.txt"が同じ文字列が10万行であると仮定して、$test = <FH>とtest =<FH>の負荷は10万倍になるのでしょうか?
11デフォルトの名無しさん:2005/07/21(木) 00:42:38
>>9
(1)
unpack/pack または ord/chr

(2)
unpack/pack または ord/chr&hex
12デフォルトの名無しさん:2005/07/21(木) 00:43:51
>>10
「負荷」が何を指すのか不明だが、
メモリ消費はは10万倍になるな。当然だが。
13デフォルトの名無しさん:2005/07/21(木) 01:02:25
>>11
ヒントありがとうございます。
14デフォルトの名無しさん:2005/07/21(木) 01:26:26
>>12
ありがとうございます。
趣味のプログラムなのでよい言葉が浮かばなかったのであやふやな表現になりました。
CPU使用率の意味で使ったつもりです。
15デフォルトの名無しさん:2005/07/21(木) 01:34:02
質問です。
Perlメモには

srand;
open(FILE, "< $file");
rand($.) < 1 and $line = $_ while <FILE>;
close(FILE);
print $line;

でファイルからランダムに1行選択できる、とありましたが
10行選択したい場合はどのように記述すればよいのでしょうか。
16デフォルトの名無しさん:2005/07/21(木) 11:59:08
>>15
>このスクリプトではファイル全体をメモリに読み込まないので
>少ないメモリで実行させることができます.
>また,ファイルの行数があらかじめわかっている必要もありません.

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;
17デフォルトの名無しさん:2005/07/21(木) 12:42:37
たぶん考え方はそれでいいんじゃないかと。
行の前後関係を保とうとするとさらに一工夫
必要かな。
18デフォルトの名無しさん: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;

て感じかな(未確認)。
19デフォルトの名無しさん:2005/07/21(木) 14:52:54
すまん
$n < $max
だな。
20デフォルトの名無しさん:2005/07/21(木) 15:07:46
数十から100程度のthread内で他のコマンド(catとか、findとか)をopenで
呼び出す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の問題なのか切り分け
ようと思うのですが、どこから手を付けたらよいのでしょうか。


21デフォルトの名無しさん:2005/07/21(木) 15:32:09
>>20
ユーザ当たりのプロセス数制限やファイルディスクリプタ数制限に
引っかかってるのかも知れず。そうだとしたら OS 側の設定の問題。
多少面倒でも外部コマンドを使わず組込関数で処理した方がいい
かもね。
2218:2005/07/21(木) 15:54:27
たびたびすまん
($n < $max or rand($.) < 1) and $array[($n < $max) ? $n++ : int(rand $max)] = [$_, $.] while <FILE>;
じゃないといかんな。
23デフォルトの名無しさん:2005/07/21(木) 16:14:29
sortするのも手ではあるが、spliceでランダムに一つ落として
新しいのをpushするという方法もありそうだ。
2420:2005/07/21(木) 20:08:40
>>20

独自プロトコルのTCP通信もやっている関係上、組み込み関数だとsocketから作らなきゃならないので
処理能力的にハードルが高いのです(送受信はそうでもないのですが、メッセージの構築に時間が掛かるので)
OS側の制限ならopen時にerrorで終了してもよさそうなんですが、無限ループ状態(もしかしたら
数時間待てば返ってくるのかも)のままなんですよね。
perlスクリプト内でカーネル内メモリを読み出す、なんて出来るんでしょうか?
外部プログラムから読むのであれば、またopenしなきゃなりませんし。。。
25デフォルトの名無しさん:2005/07/21(木) 20:24:31
Perlでthreadを使うのが間違いの元
Perlのライブラリやモジュールなんてthreadのこと
考慮してないのがほとんどだろ
26デフォルトの名無しさん:2005/07/21(木) 20:43:30
無限ループって具体的にどんな状態なのかとか
fork(2) のコストだってかなりのもんなのではないかとか
27デフォルトの名無しさん:2005/07/21(木) 20:43:47
>>20
openでパイプが開いて、処理がPerl側に戻ってくる前に、
プロセスが一杯になってるのでは。
それだとopenはエラーを返さない可能性があると思うけど。
21の言っているように、開けるプロセス数を増やしてみては。
28デフォルトの名無しさん:2005/07/21(木) 21:04:59
あとは同時に動かすthread数を制限するとか、
eval, die, alart 使ってtimeoutしたら例外飛ばすとか。
とにかくまずはプロセス数の設定を確認・増やしてみて
様子を見るのが一番だと思うけど。
29デフォルトの名無しさん:2005/07/21(木) 22:01:43
前スレが落ちたのでもう一度質問させていただきます。

use constantによる定数定義をまとめたファイルがあって
それを一度だけrequireして使いたいのですが、
useの有効期限がファイルの終わりまでなので、
requireする側のファイルでは無効になってしまいます。
ファイル間を越えてグローバルに定数を扱うにはどうしたら
良いでしょうか?識者のご意見をお聞かせください!
30デフォルトの名無しさん:2005/07/21(木) 22:24:59
>>29
> useの有効期限がファイルの終わりまでなので

これがあるから釣りだと思われたんじゃないか?

BEGIN{
require 'constants.pl';
}
31デフォルトの名無しさん:2005/07/21(木) 22:28:23
Exporter使え、とゆーのがあったと思うのだが。
[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";
3215:2005/07/21(木) 22:28:30
>>16-23
回答ありがとうございます。
実は時間が差し迫っていたこともあり、実際に書いたコードは
全部ロードしてから 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;

こんな風に考えていました。バラバラに代入していく方法でも確率は均等になるのでしょうか。
3315:2005/07/21(木) 22:31:23
ここに書き込むにあたり、こんなのも考えてみました。

my @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;
34デフォルトの名無しさん:2005/07/21(木) 22:43:21
>>31
俺もExporter使えと誰かが答えていたのを見たような覚えがある。

ところで、ourで@EXPORTなら、pakcage無しで main に入れて
>>30
みたいにするのと変わりが無いかも…。
35デフォルトの名無しさん:2005/07/21(木) 22:54:58
Perlのconstantって、確か関数呼び出しみたいな感じだったような。。
擬似的に定数っぽく見せてるだけなんだよね(あってる?)。
36デフォルトの名無しさん:2005/07/21(木) 23:03:18
>>35
基本的には sub NAME { 'value' } というのを作るだけ。> constant
但しこういう中身が一つのリテラルだけのサブルーチンはコンパイル時に
最適化され、関数を呼び出してる部分に値がインライン展開されるので、
実行時には最初から定数を書いてるのと同じになる。

perl -MO=Deparse script として、どういう風に最適化されるか調べてみ。
37デフォルトの名無しさん:2005/07/21(木) 23:13:09
>>36
やっぱそうか。
もともと同じ名前で関数実装する以外、定数定義する方法が無かったもんね。
そんな実行オプションがあるとは知らなかった。感謝。

なんか use base Exporter; にしても constant にしても、
Perl の歴史(というのか、微妙な努力というか…)を見るようだ。
38デフォルトの名無しさん:2005/07/21(木) 23:25:58
そーゆー意味では、eval {...} if ($@) {...}は最凶だと思ふ。
# もーちょっとやりよーはなかったのかよ……。
39デフォルトの名無しさん:2005/07/21(木) 23:30:01
前スレでExporterでぶち込めと書いたものですが。
レス見てたら
use base 'constants.pl';
で逝けそうな気がしてきた。

どうしてもrequireしたい(条件によってファイルを変えるなど)のなら
require 'constants.pl';
@ISA = qw( constants.pl );
じゃ?

また試せる環境にないから投げっぱなしジャーマンスープレックス的レスなんだが。
40デフォルトの名無しさん:2005/07/21(木) 23:39:48
>>39
…おまえ、Perlの継承システムを全然理解して無いだろ。
41デフォルトの名無しさん:2005/07/21(木) 23:58:01
>>38
禿同
ブロックのeval、もうメチャクチャ。
Error.pm も微妙だけど、そのうちこういうのも吸収されていくのかね。
4239:2005/07/22(金) 00:39:22
あれれ、一応OOPで継承構造使ってるんだけどな。
OOPでもそうでなくてもuse base か@ISA指定でサブルーチンが継承されるのは確認してるよ。
それが正しいかどうかは脇に置くけどね。Exporter自体好きじゃない。
43デフォルトの名無しさん:2005/07/22(金) 01:16:36
>>42
…何言ってんだか。>>38ははっきり言って無茶苦茶だぞ。

1.baseプラグマへの引数はファイル名ではなくパッケージ名
2.@ISAへ入れる文字列はファイル名ではなくパッケージ名
3.継承されるのは「メソッド」である。(*)

* 実体はサブルーチンだが、呼び出される過程が全く違うため区別して考える必要がある。
 具体的には、継承したメソッドは必ず$class->method()としなければならなず、
 「継承」であるため定数サブルーチンであっても「インライン展開」はされない。
 定数サブルーチンの場合は結果は同じだが、引数を取る「非メソッドサブルーチン」を
 継承しても、メソッドコール構文で呼び出すことは出来ない。
 (というか、呼び出しても意味のある結果は得られない。)
44デフォルトの名無しさん:2005/07/22(金) 01:35:12
>>42
俺は一応40ではないが。
>>39
を推測。

ひょっとして他の人のレス読んで、constantがサブルーチンなら
use base で呼び出し元のクラスの上(かmain::)に入れようと思ったとか?
ただしpackageは切っといて、Exporter使わない方向で
(rubyのmoduleみたいなもんかな)。

継承させる意味は無いけどな。
ただそれだとmainパッケージに入っていても、main->Const みたいにしか呼べないぞ。
一応、試してはみたが。
4539:2005/07/22(金) 02:33:49
ごめんね、不用意すぎた。
継承がパッケージ単位であることはさすがに知ってるよ。
みんな".pl"って時点でpackage化されていない外部ファイルって言う理解なのね?
use base 'constants.pl';
@ISA = qw( constants.pl );
この辺りはファイル名変えるのだりぃから違和感感じながら適当にコピペした。
言いたいことだけ伝わると思ったのよぉ
46デフォルトの名無しさん:2005/07/22(金) 02:36:41
>>38 >>41
C++/Javaのtry-catchだって
「やってみてだめなら例外投げるから受けとれ」
なんだから、ブロックのeval+$@そのものじゃないか。

入力値のバリデーションの定型句、型キャストに失敗したら
エラーだねって処理なんかスゲー乱暴で好きになれん。

# あくまで好みの問題なんだけどね。
# オフショアで隣国に投げるとき(時間も予算も限られてて
# コーダーに余計なこと考えてほしくない時)なんかは
# try-catchのほうが楽だよな
4720: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);
}
---
4820:2005/07/22(金) 14:00:37
limitの結果は
---
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を起動しようとして固まっているのか、
どうやって調べましょう????
4920:2005/07/22(金) 14:02:27
>>25
元組込屋なせいか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を立てればいいのかな?
50デフォルトの名無しさん:2005/07/22(金) 14:11:01
>>48
> perl側でshellを起動したあとに固まっているのか、shellを起動しようとして固まっているのか、
> どうやって調べましょう????

lastcommを有効にすれば一発。
51デフォルトの名無しさん:2005/07/22(金) 17:15:04
thread全く使わずにベタで動かしてみるとか。
52デフォルトの名無しさん:2005/07/22(金) 17:23:10
>>46
たぶん
・evalの使い方が本来と違っているので違和感がありすぎる
・飛んでくる例外が$@のメッセージというのが気に入らない
という事でしょう。

まぁ eval, $@で例外処理ができるというのは、代替案が無いよりマシ。
53デフォルトの名無しさん:2005/07/22(金) 21:19:17
eval $strとeval{ code }の意味が違うってのがもにょるな。

try{ code }でよかったのに。
54デフォルトの名無しさん:2005/07/22(金) 21:35:40
>>53
> eval EXPR と eval BLOCK
その辺のコンテキスト判断がどの言語より人間の意識に近い
(期待通りになる)んでPerlはすごく気持ち良いんだな~。
$count = @array;
とか。ほかの言語から入ったときまず面食らうのがここなんだが。
55デフォルトの名無しさん:2005/07/22(金) 21:38:30
>>54
> どの言語より人間の意識に近い

そうかな~?
56デフォルトの名無しさん:2005/07/22(金) 21:44:47
>>54
趣味で書いてるなら別にどうなってても良いんだけどねぇ。
仕事のはそうはいかない。
新人実戦投入で教えなきゃいけない時とか、他の人のコード読む時に、
いかにもPerlな「こんなのもできるぜコード」があるとすごく困る。
57デフォルトの名無しさん:2005/07/22(金) 22:16:10
自然言語に近いってのは賛成だな。
だからスラングみたいなのがあるのは仕方ない。
58デフォルトの名無しさん:2005/07/22(金) 22:17:44
Windowsで拡張子を.plにして起動したときに
コンソールを非表示とか最小化状態で起動するにはどうすればいいですか?
59デフォルトの名無しさん:2005/07/22(金) 22:21:32
>>56
chomp (my $dummy = $q->param('content') );
とかな。(´ー`)

そこでコーディング規約なんだが、
強制で規約守らせちまうツールがないんだよな。
EclipseのEPICがもうちょっと良くなってくれれば
いいんだが。。。
60デフォルトの名無しさん:2005/07/22(金) 23:18:31
>>58
wperl.exe使うとか?
61デフォルトの名無しさん:2005/07/23(土) 15:54:23
>58

BEGIN {
if ( $^O eq 'MSWin32' ) {
require Win32::Console;
Win32::Console::Free();
}
}
62デフォルトの名無しさん:2005/07/23(土) 19:05:10
すいません質問です。
use strictとかuse warningsを使う場合、
モジュールの呼び出し元のファイルで一回記述しておけば
呼び出し側ではやらなくても良いのでしょうか?
それともファイル毎に記述すべきですか?
6362:2005/07/23(土) 19:07:27
日本語が変でした。ちょっと訂正します。

すいません質問です。
use strictとかuse warningsを使う場合、
モジュールの呼び出し元のファイルで一回記述しておけば
モジュール側では記述しなくても良いのでしょうか?
それともファイル毎に記述すべきですか?
64デフォルトの名無しさん:2005/07/23(土) 19:14:47
>>63
strict/warningsの有効範囲はプログラム全体でもファイル全体でもなく「ブロック」。
そのくらい試せよ。
6562:2005/07/23(土) 20:06:26
>>64
ありがとうございます。
プログラム全体で有効にさせたい場合は全てのファイルで
先頭にでも記述しとけばいいということですね。
66デフォルトの名無しさん:2005/07/24(日) 00:09:00
warningsはperl -wで全体で有効に出来る
67デフォルトの名無しさん:2005/07/24(日) 01:33:07
>>60
>>61
有り難うございます。両方出来ました。
68デフォルトの名無しさん:2005/07/24(日) 02:09:51
Apatch&Active Perlをインストールしたのですが、テストで良くあるHello表示スクリプトを実行させてみても、CGIとしての動作では無く、テキストファイルを読むようにソースがずらっとブラウザに表示されてしまいます。
インストールし直して見てもダメだったのですが、お知恵をお借りできませんか?

WinXPにActivePerl-5.8.7.813-MSWin32-x86-148120.msiとapache_1.3.33-win32-x86-no_src.msiをインストールしました。
DOS窓でPerl -vした場合も、ちゃんとメッセージが返ってきます。
69デフォルトの名無しさん:2005/07/24(日) 02:24:23
>>68
ヒント。
・httpd.confの設定
・+ExecCGI
・ScriptAlias
あとはWebProg板のほうが適切と思われ。
70デフォルトの名無しさん:2005/07/24(日) 02:24:49
>>68
それはおそらく、Perlの問題ではなくApatchの設定の問題だと思われます。
また、>>1をご覧になるとわかる通りCGIに関する質問は板違いになるので
Webプログラム板でされた方が回答が得易いかと思われます。
7168:2005/07/24(日) 09:53:48
>・httpd.confの設定

↑これでした。
ありがとう。
板違いだったようで、失礼しました。
72デフォルトの名無しさん:2005/07/24(日) 15:57:25
ちなみに、"Apache"が正しい綴りだから覚えておくといい。
73デフォルトの名無しさん:2005/07/24(日) 17:08:54
継ぎ接ぎのwebサーバーってのが語源だっけ。
74デフォルトの名無しさん:2005/07/24(日) 17:40:51
パッチだらけ
75デフォルトの名無しさん:2005/07/24(日) 18:18:50
>>73
味噌糞ぐちゃぐちゃ病気言語を自認するPerlとの相性はぴったりだな
76デフォルトの名無しさん:2005/07/24(日) 18:19:25
NCSA httpへのパッチの集合体から始まった。
77デフォルトの名無しさん:2005/07/24(日) 18:21:34
dが抜けてた orz
NCSA httpd
78デフォルトの名無しさん:2005/07/24(日) 19:07:32
何か引数を必要とするサブルーチンを用意し、そのサブルーチンの名称が
hogeだったとしてスカラー変数$tmpに'hoge($arg)'と代入して、その後
eva $tmp
とすると、Too many argumentsがでます。evalで使用しない場合はでないの
ですが・・・
あとサブルーチンのプロトタイプ宣言をするとToo many argumentsはでなく
なりますね。

これはどういう理屈なのでしょうか?
79デフォルトの名無しさん:2005/07/24(日) 19:35:23
逃げちゃ駄目だ逃げちゃ駄目だ逃げちゃ駄目だ
80デフォルトの名無しさん:2005/07/24(日) 19:37:40
>>78
質問は日本語で書け
81デフォルトの名無しさん:2005/07/24(日) 20:18:35
この場合数行でそのエラーの出るコードを書くことが
できるだろうからそれをきっちりさらしてもらった
ほうがいいな。

82デフォルトの名無しさん:2005/07/24(日) 20:50:52
さてコードを貼り付けようとコードを整理したらちょっと
気づいたことがあったので、ぷろPでちょろっと調べたら
事故解決しますたw
83デフォルトの名無しさん:2005/07/24(日) 22:09:42
m9(^Д^) プギャー
二度とくるな
84デフォルトの名無しさん:2005/07/25(月) 12:41:39
検索文字列をURLエンコードされたGoogleのURIとして出力する
Perlスクリプトhoge.plを書きまして
Linuxのシェル上から
$ w3m `hoge.pl うんこ`
みたいにすれば文字列「うんこ」の検索結果が表示できるようにしたのですが、
hoge.pl内部にて
system "w3m $uri"; #$uriは作成されたURIの文字列
みたいにして
$hoge.pl うんこ
だけで同様の動作を得ようとすると
Error occured while reset 800b: errno=5
と表示されまともに動作しないのです。アレならhoge.plの中身書きますが、
とりあえずどういう不具合が考えられるでしょうか?
8584:2005/07/25(月) 12:59:21
あー分かりました。シェル上のワイルドカードってやつですね。
大変失礼しました。
86デフォルトの名無しさん:2005/07/25(月) 14:45:23
関数を変数として扱うにはどうしたらよいですか?
87デフォルトの名無しさん:2005/07/25(月) 14:50:07
夏だなあ
88デフォルトの名無しさん:2005/07/25(月) 15:01:42
>>86
無名サブルーチンへのリファレンスとか?
89デフォルトの名無しさん:2005/07/25(月) 15:30:29
>>86
・現在のコード
・その「関数を変数として扱った」場合の呼び出しコード(希望でよいので)
・どうしてそのように扱いたいのか

を列挙してみましょう。
これらを整理すると、整理中に自己解決したり、検索すべきキーワードが
浮かんだりしますよ。
90デフォルトの名無しさん:2005/07/25(月) 17:23:15
>>87
こういう人を見るとホント夏を実感するねえ。
バカだなー、まあ子供だからしょうがないかって。
91デフォルトの名無しさん:2005/07/25(月) 19:26:33
最後が文章変。
92デフォルトの名無しさん:2005/07/25(月) 19:59:00
Solaris 付属の perl で perl -V とやると、以下のように Locally applied
patches がずらずらでてくるのですが、このようなパッチってどこから入手で
きるのでしょうか?

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)
93デフォルトの名無しさん:2005/07/26(火) 23:02:49
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
94デフォルトの名無しさん:2005/07/26(火) 23:06:15
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
95デフォルトの名無しさん:2005/07/26(火) 23:08:12
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
96デフォルトの名無しさん:2005/07/26(火) 23:10:18
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
97デフォルトの名無しさん:2005/07/26(火) 23:11:53
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
98デフォルトの名無しさん:2005/07/26(火) 23:14:12
キテガイ来た
99デフォルトの名無しさん:2005/07/26(火) 23:17:05
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
100デフォルトの名無しさん:2005/07/26(火) 23:23:20
>>93-96
連投いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
101デフォルトの名無しさん:2005/07/26(火) 23:28:56
>>93-97,99
連投いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
102デフォルトの名無しさん:2005/07/26(火) 23:30:55
>>93-97,99
いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
103デフォルトの名無しさん:2005/07/26(火) 23:36:09
書き込み失敗の時にボタン連打する人っているよね
104デフォルトの名無しさん:2005/07/27(水) 00:03:59
人大杉のせいだな。
105デフォルトの名無しさん:2005/07/27(水) 00:06:34
人大杉のせいだな。
もうおさまったか?
106デフォルトの名無しさん:2005/07/27(水) 00:42:43
>>100-102
連投いい加減にせいよ(゚Д゚)ゴルァ!!
107デフォルトの名無しさん:2005/07/27(水) 00:59:14
>>100-102
連投いい加減にせいよ(゚Д゚)ゴルァ!!
108デフォルトの名無しさん:2005/07/27(水) 02:00:07
なにこの糞ども
109デフォルトの名無しさん:2005/07/27(水) 02:28:30
最初のほうはちょっとだけ面白かったよ
110デフォルトの名無しさん:2005/07/27(水) 06:15:33
いいから質問に答えろよ
まさか回答する能力も無いのに偉そうにスレッド批評なんか
してたんじゃあるまいな?
111デフォルトの名無しさん:2005/07/27(水) 10:02:11
>>93
コネクションを継続させなくて環境変数とカレントディレクトリを保持すれば
Web Telnetもどきは実現できますよ。

最初にフォームで受取った文字列を `` または open'コマンド|' に渡して
コマンドを実行したら出力結果を標準出力に出力。
コマンド実行後、現在の%ENVの中身とカレントディレクトリを
セッションファイルなり、input hiddenなりで保持。
次回以降の接続毎に保持していた環境変数の内容を%ENVにコピーして
保持していたカレントディレクトリにchdirして、
最初を繰り返せば前回の作業の続きができます。
112デフォルトの名無しさん:2005/07/27(水) 18:46:23
93です
連続投稿になってしまい誠に申し訳ありませんでした。
故意ではありませんが確認を怠った手前のミスとして逝ってきます。

>>111さま
telnet.cgiという名前で似た機能のがwebで落ちてますね。

当方、会社先でセキュリティが厳しくまともに通してくれるのは
25,80,110portぐらいなんです。なのでhttp経由で任意のホストへ接続出来れば
内職がしやすいかなって思いまして。
結局適当なPORTにlistenしてクライアント管理プログラムから
socketでやり取りするプログラムで期待の動作をするサンプル
プログラムが書けました。
所々でブロックしてしまう等、多々問題はありますが1つ1つ改善していきます。
113デフォルトの名無しさん:2005/07/27(水) 20:29:59
怖ろしい……怖ろし過ぎる……


114デフォルトの名無しさん:2005/07/27(水) 21:20:33
>>112
中途半端な知識しか無いのにモラルは最低の厨房
会社から見ると癌以外の何者でもないですね
仕事もできなさそう
115デフォルトの名無しさん:2005/07/27(水) 21:51:24
>>112
SoftEther
116デフォルトの名無しさん:2005/07/27(水) 22:32:36
うはw
117デフォルトの名無しさん:2005/07/28(木) 18:45:29
他のアプリが開いてるソケットをモニタして,
そこを流れてるパケットを条件が一致したものだけログに取るというスクリプトを
Perlで作ろうとしてるのですが,他のアプリが開いてるソケットのIDを取得するには
どうすればいいのでしょうか?
118デフォルトの名無しさん:2005/07/28(木) 21:01:45
環境非依存な方法でそんなことはできない
せめてOSを書きなさい
119117:2005/07/28(木) 21:15:33
大変失礼しました
OSはwindows2000SP4,それにActivePerl5.8を入れて使ってます。
120デフォルトの名無しさん:2005/07/29(金) 14:01:51
>>112
>>115紹介の企業ページ注意文を抜粋

> SoftEther を使用すると、会社内のネットワークと外部ネットワークやコンピュータ同士を、
> ネットワーク管理者の許諾を一切得ること無く、無断で接続することができてしまいます。
> ネットワークに関する知識の少ない人がこのような接続を行うと、自分の PC だけではなく、
> LAN に接続された他のすべての PC にも重大な影響が出る場合があります。

> また、SoftEther を使用して構築した仮想ネットワーク上のパケットは、会社内 LAN に設置されたファイアウォールや
> ウイルス検出システムは絶対に検知することができません。そのため、社内 LAN のシステム管理者が外部からの攻撃や
> ウイルス感染を防ぐようにシステムを構成していても、SoftEther 仮想ネットワーク経由で社内 LAN にウイルスが
> 感染したり、攻撃の対象となっていまうことがあります。

> これらの危険性があるため、SoftEther の使用については、SoftEther の仕組みや各種ネットワーク・プロトコルに
> 関する十分な知識を習得した上で行うようにしてください。特に、社内 LAN などのプライベートネットワークの
> ユーザーは、SoftEther を使用する前に必ずシステム管理者・ネットワーク管理者に対して許可を得てください。
> SoftEther の開発者・配布者は、SoftEther によって引き起こされたすべての損害について一切責任を
> 負いかねますので、ご注意ください。

つまり、>>112のような人は、使わないでねと言ってる。
121デフォルトの名無しさん:2005/07/29(金) 14:21:21
>>112みたいな人って、一般的に、会社で懲罰の対象になったりするの?

ああいうことをやって、会社のシステムに侵入されて、懲戒免職になった
という人は知っているけどさ。
122デフォルトの名無しさん:2005/07/29(金) 21:01:36
つか、ネットワークとか関係なく勤務時間中に内職
やってる時点でダメだろ
123デフォルトの名無しさん:2005/07/30(土) 01:36:10
ここできいていいのかわかりませんが、DBIについて質問です。

Perlの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くらい


124デフォルトの名無しさん:2005/07/30(土) 05:23:53
if ($a =~ /$b/)で、マッチさせたい$bの中に括弧が入っていると、エラーが出てしまいます。
$bの中の文字列はコロコロ変わるので、エスケープは出来ないんですが、
どうすればマッチさせられますか?
125デフォルトの名無しさん:2005/07/30(土) 05:36:42
>>124
つ quotemeta関数
126デフォルトの名無しさん:2005/07/30(土) 09:28:27
>>123
my $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/
127デフォルトの名無しさん:2005/07/30(土) 21:40:53
Linuxに詳しくないんですが質問させて下さい。
cronの使えない環境で定期的にCGIを動かすにはどうすればいいでしょうか?
全然アクセス数がないのでimgタグとかで動かすってのはできないです。
cronの使えるサーバを別で借りてwgetしても動くんでしょうか?
128デフォルトの名無しさん:2005/07/30(土) 21:52:06
>>127
CGI の質問は WebProg 板で。 http://pc8.2ch.net/php/
129デフォルトの名無しさん:2005/07/30(土) 22:20:16
>>127
大きな声ではいえないが、ある勘定系システムでは夜間バッチを
なぜかWebAppで作って、wgetで叩いていることを俺は知っている。
おまけにパラメタはget渡しで、サニタイズなし。(-Д-)サムイネェ

だから君の場合cron+wgetでオケーだ。
130デフォルトの名無しさん:2005/08/01(月) 01:15:55
日付を取得して、その日付の二日前を取得したいのですが、

たとえば8/1だとして、
$foo = sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday-2);
とすると
200508-1となってしまいます。
これを20050730とすることはできるのでしょうか?
131デフォルトの名無しさん:2005/08/01(月) 01:24:25
かいkりゅv
132デフォルトの名無しさん:2005/08/01(月) 01:30:45
2日前にしてから time - 60 * 60 * 24 * 2 日付取得すりゃいいんだよ
133デフォルトの名無しさん:2005/08/01(月) 01:31:36
use Time::Local;
$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);
134デフォルトの名無しさん:2005/08/01(月) 03:19:22
PerlでMSNメッセンジャークライアントスクリプトを作ってるんですが、
メッセンジャーのオンライン状態を継続するにはプロセスを維持する必要があります。

while(1){ }のループでソケットの監視を続けたいと考えていますが、
while構文は時間経過によって負荷が増大したりしますか?
ループ内においてメモリを消費し続ける処理はありません。

(もちろん、一定時間によるタイムアウトやリモート操作はできるようにします。)
135デフォルトの名無しさん:2005/08/01(月) 03:29:57
>127
毎日決まった時間になったら、コンソールから動かしたいプログラムの
名前をタイプしてエンターキーを押す。
136134:2005/08/01(月) 03:52:27
ちと間抜けな質問だったので補足します。

レンタルWebサーバでの運用を考えており、
ローカル(Windows2000+ActivePerl)でのテストは実施。
タスクマネージャでプロセスの状態とパフォーマンスの変化を
確認したところ、メモリ・CPUいずれにおいても
時間経過(30分程度)による状態の変化は特にありませんでした。
そこで、実際に運用したいレンタルサーバにおいてはどうか、
テスト環境と異なるOSにおいては負荷が増大する可能性が
あり得るのかを知りたかったというわけです。
もちろん、プロセスが長く残ること自体の是非もあると思いますけど。

実際に運用したいサーバはValue Domainのレンタルサーバ。
仕様は特に明記してあるところが見つからなかったので不明です。
HTTPヘッダにも Server: Apache としか無かったので...

どうぞ皆さまよろすく(゚Д゚)ノ
137デフォルトの名無しさん:2005/08/01(月) 04:09:42
知らんけど、irc proxyのpircだのmadokaだのを
年がら年中起動しっぱなしの人はよくいるね。
138デフォルトの名無しさん:2005/08/01(月) 06:15:20
xreaの鯖はCGIプロセスが何秒か走ってると殺されたような希ガス
139デフォルトの名無しさん:2005/08/01(月) 09:02:39
localtime() 使って +1900 とかするの面倒なら
use POSIX(strftime);
すると幸せになれるよ。
140134:2005/08/01(月) 11:30:24
>>138
試してみたら、おっしゃる通り8分程度で切られますた。
やっぱり自分のサーバでないとだめかぁ(´・ェ・`)
141デフォルトの名無しさん:2005/08/01(月) 14:25:54
常駐デーモン可の間借り鯖なんて殆どないでしょ

142デフォルトの名無しさん:2005/08/01(月) 20:42:29
>>134
質問とは関係ないし、知ってるかもしれないけど
MSNメッセクライアントならCPANにMSN.pmとか
ttp://www.bot-depot.com/forums/index.php?showforum=12
にMSN2.pmとかあるよ

型落ちの自前鯖で動かしてるけど良好
143デフォルトの名無しさん:2005/08/01(月) 20:46:14
二重forkしてこっそり走らせることもできなくはないんじゃないの
144 ◆TWARamEjuA :2005/08/01(月) 22:25:02 BE:654023-##
二重fork?
詳細キボンヌ
145デフォルトの名無しさん:2005/08/01(月) 22:36:51
>>143
察知されて対策されるだけ。
おまけにペナルティも食らうかも。

146134:2005/08/02(火) 01:05:02
>>142
今のスクリプトは最新のコマンドをモニタして、
それに合わせてMSN.pmを少々書き換えながら使ってます。
けどMSN2.pmは知らなかった。ちと見てみる!サンクス

実はAjaxで(関係無いけど)チャットスクリプトを作っていて、
部屋に誰かがログインしたときや特定のコマンドを使ったときに
MSNのメンバリストに登録されている人に通知を送るような仕組みを作ってます。
現段階で一応ひととおりのことは出来ていて、
あとはクライアントのオンライン状態維持が課題だったわけです。
結局、都度プロセス起動→通知処理→終了という動きにせざるを得ないようです。

しかしMSNはアドレス指定でインスタントメッセージの投げっぱなしができるのかと思っていたら、
SwitchBoardのコネクションをユーザごとに確立しなければならないようで...
この構想自体、なんだかわずらわしい仕組みに思えてきたトコです。合掌。
147デフォルトの名無しさん:2005/08/02(火) 12:55:42
>>145
5分程度で次々に再起動するのはどうだ。

勿論冗談だ。
148デフォルトの名無しさん:2005/08/02(火) 18:57:25
メインループの中に fork && exit を
入れると消されなくなるよ。
あ、XCPUをignoreするの忘れずに。

例えば

$SIG{'XCPU'}='IGNORE';
while (1) {
fork && exit;
}

みたいに。
149デフォルトの名無しさん:2005/08/02(火) 20:25:37
xreaに通報していい?
150デフォルトの名無しさん:2005/08/02(火) 20:34:33
redhat9でperl5を使っています

サブクラス 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.
151デフォルトの名無しさん:2005/08/02(火) 20:38:53
>>150
情報が少なすぎて何ともいえないが、ファイル名じゃないか?

KbParser.pm <-> kbParser.pm
152デフォルトの名無しさん:2005/08/02(火) 22:29:30
>>151

回答ありがとう
書き間違えです、ファイル名はあっています・・

パッケージを追加した場合、なにかperlに対して設定変更が必要なのでしょうか?
153デフォルトの名無しさん:2005/08/02(火) 23:17:45
>>148
止まらなくなった…どうやって止めたらいいの?
killしようにもpidがコロコロ変わるのでkillできない!!!
154デフォルトの名無しさん:2005/08/02(火) 23:18:34
あーあ・・・本当にやっちゃたじゃんか
かわいそ
155デフォルトの名無しさん:2005/08/02(火) 23:19:24
150 ですが、自己解決しますた
サンクス
156デフォルトの名無しさん:2005/08/03(水) 00:14:24
>>153
pkill(1)
157デフォルトの名無しさん:2005/08/03(水) 00:18:54
http://hoge.com/050730_2006%7E01-1.JPG

のように、%のついてファイル名(写真)を、perlからhtmlを生成して出力しているのですが
ファイル名に % があると、2バイト文字として認識しているのか? 写真が表示できません
うまい回避方法はあるでしょうか?
158デフォルトの名無しさん:2005/08/03(水) 00:28:55
>>157
何かを勘違いしている可能性あり。
コード晒せ。
159デフォルトの名無しさん:2005/08/03(水) 00:39:42
%7Eって '~' だよね。
160デフォルトの名無しさん:2005/08/03(水) 00:51:42
>>153
PGIDしらべてプロセスグループを殺すとか、
調べるのめんどくさければ他のも巻き添え
食うの覚悟でkill -1という手もある。
161デフォルトの名無しさん:2005/08/03(水) 01:03:22
>>160
>kill -1
ドラえもんが、ネズミを駆除するのに「地球破壊ばくだん」を使おうとした話を
思い出したw いや確かに、繁殖力の強いネスミを絶滅させるにはそれしかないん
だろうけどw
162デフォルトの名無しさん:2005/08/03(水) 01:05:04
>>158


じゃあ、単純に 
/var/www/hoge/hoge%hoge.jpg

というファイルがあって、それをブラウザで表示する
http://hoge.com/hoge%hoge.jpg

とやっても表示されない
ファイル名を hogehoge.jpgとして
 http://hoge.com/hogehoge.jpg

とすると表示されます。。
なんででしょ?
163デフォルトの名無しさん:2005/08/03(水) 01:11:42
>>162
rfc1738
164デフォルトの名無しさん:2005/08/03(水) 02:05:05
>>163
サンクスコ

% → %25 で直りマスタ
165デフォルトの名無しさん:2005/08/03(水) 02:07:47
>>162
> じゃあ、単純に 
> /var/www/hoge/hoge%hoge.jpg
>
> というファイルがあって、それをブラウザで表示する
> http://hoge.com/hoge%hoge.jpg

http://hoge.com/hoge%25hoge.jpg

でイクのかな?

っていうか、ブラウザのメッセージくらい見ろよ。
166デフォルトの名無しさん:2005/08/03(水) 09:52:58
パスワードをGETデータで扱うのはやめたほうがいいでしょうか。
HTTP_REFERERでパスが漏れるのが心配なんですが
他のサイトへのリンクを貼らなければ大丈夫ですか?
167デフォルトの名無しさん:2005/08/03(水) 10:51:47
仕事でPerlのソース読んでるんですが、以下の関数の結果は違うのでしょうか。

&jcode'convert()
&jcode::convert()
(引数省略)

エディタの色分けがおかしくなってしまうので、「::」の形式に統一したいのですが
問題ないでしょうか?
168デフォルトの名無しさん:2005/08/03(水) 11:02:52
>>167
その糞エディタを(ry

他人のコードを読むにあたってエディタの都合で
コード改変というのは発想が間違っている。

そもそも質問にあるようなコードぐらい自分で検証できんのかと。
169デフォルトの名無しさん:2005/08/03(水) 11:38:54
>>161
> 地球破壊ばくだん
正確には「地球はかい爆弾」。


・・・恐ろしくどうでもいい指摘だなw
170デフォルトの名無しさん:2005/08/03(水) 12:42:38
>>167
perlmodによれば
古いパッケージ区切り子はシングルクォートでしたが、
現在はダブルコロンを使うのが推奨されています。
なぜなら、この方が人間が読みやすいということと、emacsで読みやすいからです。
これはまた、 C++プログラマーに自分が知っていることのように思わせるようにもします。
それは以前のシングルクォートがAdaプログラマに馴染みのものでであったことと同じです。
171デフォルトの名無しさん:2005/08/03(水) 13:37:57
>>168
>>170
レスありがとうございます。
コード改変についてはそれが許されている状況だったもので。
検証はしてみたのですが、違いが無かったので心配したわけです。
ありがとうございました。
172デフォルトの名無しさん:2005/08/03(水) 14:11:46
>>166
そのパスワードが漏れてもいいようなどうでもいいものならそれでいいんじゃね?
173デフォルトの名無しさん:2005/08/03(水) 14:18:33
>>171
168は許されている許されていないの問題ではなく、
エディタの都合でソースを弄るということが
決定的な間違いだと言っておると思うのだが。
174デフォルトの名無しさん:2005/08/03(水) 14:37:37
>173
Perl4時代の古い習慣だし、直していいんじゃね?

コロン2つになった理由の一つもコレだし↓
>なぜなら、この方が人間が読みやすいということと、emacsで読みやすいからです。
                                ~~~~~~

ついでに言うと、古い*.plライブラリを*.pmモジュールに変換する
pl2pmなるユーティリティがPerlディストリビューションに含まれている。
つまり、これは非常識でもなんでもない。
175デフォルトの名無しさん:2005/08/03(水) 15:12:05
ってかいちいち独りよがりの妄想で自分で自分を縛ってたら、
仕事が遅くなるだけじゃねーかw
そんな考え、誰も評価しませんから~。!残念!
176デフォルトの名無しさん:2005/08/03(水) 16:59:12
今時ギター侍・・・
177デフォルトの名無しさん:2005/08/03(水) 17:32:19
外界との接触が少ないんだろ
178デフォルトの名無しさん:2005/08/03(水) 21:25:28
しかも句点の後ろにエクスクラメーションマークだもんな。
179デフォルトの名無しさん:2005/08/04(木) 13:20:27
GDをインストールしようとした。
makeは成功したが、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

と出てテストが失敗してしまう
180デフォルトの名無しさん:2005/08/04(木) 16:35:08
こんにちは。質問です。

cのgetprognameみたいなものってありますでしょうか?
$0を自分で整形するのが普通なんでしょうか?
181デフォルトの名無しさん:2005/08/04(木) 18:17:33
基本的な質問で、すいません。
パールは、クライアントの入力情報を反映させて、
HTMLソースを生成できますが、
HTMLソースにパールを埋め込んで?(そのページが「○○○.cgi]ではなく「○○○.htm」の形で)
クライアント(HP閲覧者)の環境変数を取得することは可能でしょうか?

他に環境変数を取得できる方法とその言語、そのサーバーの環境を教えてください。


よろしくお願いします。
182181:2005/08/04(木) 18:20:08
ずれてますね。失礼しました。
183デフォルトの名無しさん:2005/08/04(木) 20:51:50
Cにgetprogname()なんて無かったと思うが
184デフォルトの名無しさん:2005/08/04(木) 21:58:35
>>181
WebProgへ行きなされ
185デフォルトの名無しさん:2005/08/04(木) 22:03:43
>>183
それが最近はあるんだな。オレはFreeBSDしか知らんが

HISTORY
These functions first appeared in NetBSD 1.6, and made their way into
FreeBSD 4.4.

だそうだ。
186デフォルトの名無しさん:2005/08/04(木) 22:10:27
>>185
それは C にあるとは言わん
187デフォルトの名無しさん:2005/08/04(木) 22:19:13
で、回答としては$0を自分で整形しろでいいのかね?
File::Basenameあたりは使えると思うけど、もっと
これ専用のものってなんかあるっけ?
188デフォルトの名無しさん:2005/08/04(木) 23:20:24
OSによって違うけど、少くともBSDじゃ
$0に代入するとperlの中の人がsetprogname()を呼んでいる。
189デフォルトの名無しさん:2005/08/04(木) 23:22:38
というか何をしたいのかがわからん。
190デフォルトの名無しさん:2005/08/04(木) 23:22:55
あ、ごめん、設定したいじゃなくて参照したいのか。
それならプログラム先頭で (my $__progname = $0) =~ s,.*/,,; で十分だろ。
Cのgetprogname()もやってることは同じだ。
191デフォルトの名無しさん:2005/08/04(木) 23:23:14
というか → ていうか
192デフォルトの名無しさん:2005/08/05(金) 11:08:49
>>183-190

ありがとうございました。
FindBinってのもあるみたいです。
193134:2005/08/05(金) 11:35:29
>>148
そんなワザがあるのかぁ…勉強になります。

とりあえず今回は穏便に、毎回プロセスを終了するようにしますた。
カネ払ってしまったからリスクのあることは出来ないのでね…
194デフォルトの名無しさん:2005/08/05(金) 12:40:57
Aug 5 12:21:42 mew sm-mta[24903]: [ID 801593 mail.info] j753LgZN024903: from=<info@mail.tank-gt.com>, size=2096, class=0, nrcpts=1, msgid=<20050804161041.18803.qmail@mail.tank-gt.com>, proto=SMTP, daemon=MTA, relay=[211.112.50.123]
こういうログがあるときに、
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
だとマッチしないのはなぜですか?
195デフォルトの名無しさん:2005/08/05(金) 13:31:48
>>193
> そんなワザがあるのかぁ…勉強になります。

×ワザ
○ワナ
196デフォルトの名無しさん:2005/08/05(金) 13:56:40
>>194
@mailが展開されてたぶん空文字列になってるから。
197デフォルトの名無しさん:2005/08/05(金) 16:50:54
>>196
okay!
Thanks.
198デフォルトの名無しさん:2005/08/05(金) 21:39:47
>>194
Sendmailなんて化石のようはソフトを使ってるから
199デフォルトの名無しさん:2005/08/05(金) 21:47:58
ようは
200デフォルトの名無しさん:2005/08/05(金) 22:11:38
>>198
え? SenderID とか Domainkeys とかの最新技術にまともに対応してんのって、
sendmail くらいしか無いじゃん。どこが化石よ。
201デフォルトの名無しさん:2005/08/06(土) 03:31:49
>>200
>>198をよく見ればわかるけど初心者を相手にしてどうする?
そのうち彼はperlのことも化石にしてしまうと思うぞ。
202デフォルトの名無しさん:2005/08/06(土) 03:51:50
perlは既に化石だから心配無用かと
203デフォルトの名無しさん:2005/08/06(土) 15:04:55
s/Ⅸ/IX/g;

ということをやらせたいのですが、sjisで書くと通りません
全角文字部分をヒアドキュメントにするにはどうすればいいですか
204デフォルトの名無しさん:2005/08/06(土) 15:19:58
>>203
ローマ数字の 9 は Shift_JIS だと \x87\x5C で、
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#errors
の「エラーにはならないけど文字化けする(1)」に相当する。
205デフォルトの名無しさん:2005/08/06(土) 15:41:43
require 5.8.1;
use encoding "cp932";
206デフォルトの名無しさん:2005/08/06(土) 17:43:44
chomp($pat = <<'EOF');

EOF
s/$pat/IX/g;

のようにすると、
Trailing \ in regex m/Ⅸ/ at xxx
というエラーになります

chomp($pat = <<EOF);

EOF
s/$pat/IX/g;

とすると、IXではなくIX\になります
よく判りません
207デフォルトの名無しさん:2005/08/06(土) 18:00:06
208デフォルトの名無しさん:2005/08/06(土) 18:01:28
わからないなら辞めちまえ
209デフォルトの名無しさん:2005/08/06(土) 18:09:47
v5.6.1 で使う限り、有効な解決方法が存在しないまたは誰もしらない
ということですね
210デフォルトの名無しさん:2005/08/06(土) 18:38:20
いえ、あなたが開発者である限り無理ってことです
211デフォルトの名無しさん:2005/08/06(土) 18:45:55
ⅨをⅨ\と書いて直接埋め込むことで解決はします
ヒアドキュメントを使った方法は不可能です
212デフォルトの名無しさん:2005/08/06(土) 18:47:49
>>204
3行目が嘘。

>>206
$pat の中身は \x87\x5C なので何の解決にもなっていない。

>>207
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#regexp
213デフォルトの名無しさん:2005/08/06(土) 19:02:45
2バイト文字をコードに直接書くことに起因する問題の多くは
ヒアドキュメントを使うことで回避できるけれど、
この場合はパターンマッチの中に使おうとしており、
どうせ文字列の評価が発生するので避けられない

何か方法がありそうな口ぶりの>>208>>210
ただの知ったかぶり
214デフォルトの名無しさん:2005/08/06(土) 21:04:43
1: use Tk;
2: my $mw = new MainWindow();
3: my $img = $mw->Photo(...);

これの3行目の処理をCから行いたいのですが、
どうすればいいのでしょうか?

Tk_CreatePhotoImageFormat を使う方法は出来たのですが、
これではPerl側が画像を作るのを待つしかありません。
そうじゃなくて、Cから画像を作りたいのですが、どうすればいいのでしょう。
215デフォルトの名無しさん:2005/08/06(土) 22:00:41
>>214
ヒント: call_sv
216デフォルトの名無しさん:2005/08/07(日) 00:12:33
妙に実行に時間がかかるPerlスクリプトがあるんだけどお手軽に各サブルーチンの実行時間を計測するような
方法ってある?
217デフォルトの名無しさん:2005/08/07(日) 00:15:50
use Benchmark;
218デフォルトの名無しさん:2005/08/07(日) 00:19:35
>>216
Devel::DProf
219デフォルトの名無しさん:2005/08/07(日) 01:29:45
>>216
Devel::Profile
220216:2005/08/07(日) 01:53:14
thx
やってみます
221デフォルトの名無しさん: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と表示されます
どこが間違っているのでしょうか?
222デフォルトの名無しさん:2005/08/07(日) 03:33:49
HTTPヘッダが終わってない。
223デフォルトの名無しさん:2005/08/07(日) 03:37:09
>>222
OK、ジョニー、ICIC
;が抜けてるのと
./が余計だったんだな
224デフォルトの名無しさん:2005/08/07(日) 04:03:16
一番の間違いはエラーログ見てないことだろ
225デフォルトの名無しさん:2005/08/07(日) 04:12:22
パール難しすぎ、っていうかややこしい
Cのほうがやりやすいわ
226デフォルトの名無しさん:2005/08/07(日) 04:16:56
はいはい
227デフォルトの名無しさん:2005/08/07(日) 04:17:55
そんな分かりきったことを何故ageで。
Perlの複雑さは並じゃない。更に不条理(ry

>>215
サンクスです。
228デフォルトの名無しさん:2005/08/07(日) 06:25:39
Perlのいいところはとっつきやすいところだと思う。
なんたって

print "Hello world.";

でOKだからな。
229デフォルトの名無しさん:2005/08/07(日) 10:43:37
p "Hello world."
230デフォルトの名無しさん:2005/08/07(日) 12:13:56
>>228
むしろそういうところがややこしい
Cなら関数にかならず()をつけるのだが、こっちは省略OKなんだろ
、がくるのかスペースがくるのかが曖昧なんだよ
そういう点ではCに慣れた人にはとっつきにくい
231デフォルトの名無しさん:2005/08/07(日) 12:19:47
perlの文法は慣れるまで大変だったけどなれたらすごい便利
Spidering Hacksでライブラリの使い方知ってから奥深さに気がついた
232デフォルトの名無しさん:2005/08/07(日) 12:21:17
>>230
省略 OK だが、省略しなければいけないワケではない。
嫌なら自分で () 付ける癖を付ければいいだろう。

読む時はほとんど問題にならないし。
233デフォルトの名無しさん:2005/08/07(日) 13:18:45
スペースやタブ(または特定の区切り文字)で区切られた文字データから、
一つ一つの要素を取り出すときに、よく使われる表現や関数などは
どのような物がありますか?
文字コードをチェックしていくのは効率が悪いと思うので。
234デフォルトの名無しさん:2005/08/07(日) 13:23:22
>>233
split
235デフォルトの名無しさん:2005/08/07(日) 13:23:54
split
236デフォルトの名無しさん:2005/08/07(日) 14:03:20
PerlIOって一言でいって、libcのバッファリングする入出力関数に依存しないってことなに?
237デフォルトの名無しさん:2005/08/07(日) 14:26:54
>>234-235
ありがとうございました。
238デフォルトの名無しさん:2005/08/07(日) 15:46:18
>>232
まあ自分でプログラム組むときはそれでいいけど
他人のソースを解読するときに$_とかそういうのが出てくると一瞬戸惑う
239デフォルトの名無しさん:2005/08/07(日) 16:22:31
ここには趣味プログラマしかいないので
他人が読むときに大変だとか考える必要はありません
240デフォルトの名無しさん:2005/08/08(月) 00:18:09
sub XXX ($) {
my $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使ったことないからよくわからん。
(サブルーチン名は適当)
241デフォルトの名無しさん:2005/08/08(月) 00:47:16
読みにくい
242デフォルトの名無しさん:2005/08/08(月) 02:24:46
>>240
<q cite="http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod">
変数のスコープや性質を表現するのに、大文字小文字を使うと便利でしょう。
</q>

if ! なんて書くなら unless にするとか、なぜ %cfg じゃなくわざわざ
ハッシュリファレンスなのよとか、こんな限定された開き方をサブ
ルーチン化する必要があるほど頻繁にやるのかとか、どうせなら
クラス書けよとか、サブルーチンの最後で値を返す時は陽に return
しない方が速いとか、嗜好の違いからくる指摘は色々できるな。
243デフォルトの名無しさん:2005/08/08(月) 03:05:02
俺もハッシュはわざわざリファレンスで使う癖があるな
244デフォルトの名無しさん:2005/08/08(月) 03:06:08
上書きopenしたあとにflockして何の意味があるのやら
245デフォルトの名無しさん:2005/08/08(月) 03:10:05
>>244
よくそれ聞くんだが、そう言う場合って完全にflockは使えないの?
お気に入りの方法あったら教えてくだはい。。
246デフォルトの名無しさん:2005/08/08(月) 05:59:38
247デフォルトの名無しさん:2005/08/08(月) 10:57:38
>>244
O_TRUNCみたいなファイルをいじってしまうオプションつけてない
からそれ自体は別に問題ないと思う。

むしろ問題なのは何をやるつもりなのかが明確に示されてない
ことだ。それがないとこれでいいのかどうかはなんとも言えない。
「ファイル名を引数にとって、ファイハンドルを返す」もの
ではあるようだが。

truncateの前のseekはあきらかに無駄だと思うけどね。

248デフォルトの名無しさん:2005/08/08(月) 14:02:50
PerlScriptをWindows実行ファイルにするにはどうすればいいですか?
249デフォルトの名無しさん:2005/08/08(月) 14:55:32
250デフォルトの名無しさん:2005/08/08(月) 16:26:06
100Mのテキストファイルを処理したいんですが
ふつうにopenで読み込むとメモリが大量に食われてしまいます
どのようにすれば回避できますか?

ちなみに処理の内容は、改行ありのテキストを配列に読み込んで
一行ずつ特定の文字を置き換えるだけです。
251デフォルトの名無しさん:2005/08/08(月) 16:42:36
>>250
ふつうにopenすりゃ良いんだけど、配列に読み込まず一行ずつ読み込んで処理汁
ファイルに書き出す必要があるならテンポラリファイルに書き込む。
で、その後リネーム
252250:2005/08/08(月) 21:50:49
出来ました
ありがとうございます
253デフォルトの名無しさん:2005/08/09(火) 00:07:59
$_ に文字列が入っている場合に
末尾が英小文字.xxx.yyy だったらTrue を返す正規表現って
どう書けばいい?
例:'abc.xxx.yyy' True
'abc.xxx.yyy' False

([a-z]+\.)+(?!xxx\.yyy)$
と書いたけど、ねらったようにTrue にならない。
「(?!xxx.yyy)」と「$」を組み合わせると
うまくいかないみたいだけど。

誰か正規表現のプロいない?
254デフォルトの名無しさん:2005/08/09(火) 00:10:18
\.xxx\.yyy$
でいいんじゃないのか?
255デフォルトの名無しさん:2005/08/09(火) 00:15:01
ああ、すまん。英小文字からか。
[a-z]\.xxx\.yyy$
かな。
てか2つの例の違いがわからんのだが。
256デフォルトの名無しさん:2005/08/09(火) 00:56:07
>>253
ごめん、例を間違えたorz
書き直し。

$_ に文字列が入っている場合に
末尾が英小文字.xxx.yyy 以外だったらTrue を返す正規表現って
どう書けばいい?
例:'abc.xxx.yyy' False
'abc.xxx.yyy.zzz' True

([a-z]+\.)+(?!xxx\.yyy)$
と書いたけど、ねらったようにTrue にならない。
「(?!xxx.yyy)」と「$」を組み合わせると
うまくいかないみたいだけど。

誰か正規表現のプロいない?
257デフォルトの名無しさん:2005/08/09(火) 01:01:38
>>256
> >>253
ごめん、質問も訂正してあります。

末尾が英小文字.xxx.yyy だったらTrue を返す正規表現って

末尾が英小文字.xxx.yyy 以外だったらTrue を返す正規表現って

「以外」の文字が増えています。
258デフォルトの名無しさん:2005/08/09(火) 01:05:16
>>256
!/[a-z]\.xxx\.yyy$/
259デフォルトの名無しさん:2005/08/09(火) 01:58:04
>>256
末尾の$との組み合わせでは、(?!pattern) がゼロ幅という事をお忘れなく。
see also "perlre" man page.

がんばって全部を1本の正規表現だけで記述するよりも、
unless 使ったり複数の簡単な正規表現に分けたほうが良い。
オートマトンが短くなれば処理コストも少なくて済む。
260デフォルトの名無しさん:2005/08/09(火) 02:51:43
いまiThreadでマルチスレッドのスクリプト書いてるんだけど
HTTP::Liteってスレッドセーフではないよね
LWPはスレッドセーフですか?
261デフォルトの名無しさん:2005/08/09(火) 03:15:33
>>260
Perlってスレッド毎にシンボルテーブルをコピーして分けてるらしいよ。
んで、スレッドの機能を使うモジュール(threads::shared等)を使わない限り、
別のスレッドのシンボルテーブルにはアクセス出来ない仕様。
だからPurePerlのモジュールは全てスレッドセーフ。

ただ、オブジェクトをスレッド間で共有して使いたいのなら、呼び出す側で同期を取らないと。
262デフォルトの名無しさん:2005/08/09(火) 03:37:24
>>261
書いているのは、スレッドを何本も立ち上げて、でもってそれらが
終了するのを待つってだけの単純なもの。
スレッド内ではHTTP::Liteでウェブサーバにアクセスして、取得した
データを加工してる。
デフォルトで非共有なのは知っていて、だからこそスレッド内の変数は
全てmyで一切共有しないようにしてるんだが、実際のところはスレッド間で
HTTP::Liteの戻り値(=取得したhtml)がかぶる。これは本来ならば
毎回違う値が帰ってくるはずなのですが。。。
263デフォルトの名無しさん:2005/08/09(火) 05:34:06
Perlから2ch内のスレッドに書き込むにはどうすればいいのでしょうか?age2ch.plのソースを読もうとしましたが、さっぱりです。
実際に適当な文字列を書き込むスクリプトを書いてくれると幸いです。

また、2chのbeにログインして書き込む場合のスクリプトも書いてくれれば幸いです。
264デフォルトの名無しさん:2005/08/09(火) 05:35:38
どうして被ったかが分かるんですか?
目で確かめたのなら兎も角(それも問題だが…)
取得したデータの比較の処理を見直した方がいいかもしれないですね。
265デフォルトの名無しさん:2005/08/09(火) 05:39:51
割り込みか。orz
>>264>>262 へのレス。

>>263
トーク2ちゃんねるってサイトがあったと思うんだけど、
確か分かりやすい説明があったと思うよ。
266デフォルトの名無しさん:2005/08/09(火) 05:57:12
>トーク2ちゃんねるってサイトがあったと思うんだけど、
見つかりません。
267デフォルトの名無しさん:2005/08/09(火) 06:27:53
>>264
デバッグ用にSTDERRに出力しています。
つーか、考えていてもらちがあかないので、Socket使って自力でHTTPを喋ることにする。
車輪の再発明だが仕方ない。
268デフォルトの名無しさん:2005/08/09(火) 06:39:59
>>266
talk2chで検索。

>>267
LWPも駄目でした?
269デフォルトの名無しさん:2005/08/09(火) 07:33:31
>>258
うん、これを「!」なしの正規表現だけで表したいのです。
270デフォルトの名無しさん:2005/08/09(火) 07:39:31
>>259
perlre 読み直します。

プログラムで記述したいのですが、
それができないところで使いたいのです。
Perl の正規表現と同じ構文を使って
True かFalse を判定し、
その後の処理を変えるというシステムがあります。
そのシステムで利用する正規表現が必要なのです。
271デフォルトの名無しさん:2005/08/09(火) 07:53:23
/[^x]{3}\.[^y]{3}$/
これじゃ駄目か?
272デフォルトの名無しさん:2005/08/09(火) 07:58:49
アルファベットか、、、なら
/[^\W\d_x]...\.[^\W\d_y]...$/
273デフォルトの名無しさん:2005/08/09(火) 08:30:09
後から「.xxx.yyyじゃなくて.ne.jpの時の方法も教えてください」とか言いそうな気がする
274デフォルトの名無しさん:2005/08/09(火) 09:37:02
>>269
"!"なしにしなければいけない理由はあるのか?
275デフォルトの名無しさん:2005/08/09(火) 10:51:59
>>274
パターンが別にファイルか何かになってて、
正規表現読み込んで使うことになってるんじゃないのかなぁ。あくまで想像だけど。
だから1本のパターンでしか書けない。

/^([a-z]+\.)+(?!xxx\.yyy).{7}$/
だと1本で書けるけど。
末尾のマッチさせたくない文字列長分、ピリオドで埋めないといけないね。
276デフォルトの名無しさん: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;
}
277デフォルトの名無しさん: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 するとか。
278デフォルトの名無しさん:2005/08/09(火) 18:11:22
>>253
/(?<![a-z]\.xxx\.yyy)$/
ではダメ?
279278:2005/08/09(火) 18:12:01
下げ忘れた。。。
280デフォルトの名無しさん:2005/08/09(火) 22:11:23
#!/usr/bin/perl -w
print "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になって表示したいようにできません。
どこが悪いのでしょう?
281デフォルトの名無しさん:2005/08/09(火) 22:28:01
>>280
板違い
282デフォルトの名無しさん:2005/08/09(火) 22:32:25
>>280
283デフォルトの名無しさん:2005/08/10(水) 00:54:22
お聞きしたいのですが、

「perlで作ったプログラムがメールを自動受信をして、ファイルを作成する」

というようなことはできるのでしょうか?

たとえば、メールを受信しsubjectを見てある特定の文字に反応してメールを転送するとか、

画像を添付してメールを送り、それをperlが自動で読み込みブラウザ上の画面に写真を追加する

といったことがしたいと考えています。


どうでしょうか?
284デフォルトの名無しさん:2005/08/10(水) 00:58:16
NET::POP
285デフォルトの名無しさん:2005/08/10(水) 01:00:17
>>283
君の場合、携帯対応の無料BBSで我慢したほうがいいと思う。
とりあえずいらん改行すんな。
286デフォルトの名無しさん:2005/08/10(水) 01:27:35
>>278
> /(?<![a-z]\.xxx\.yyy)$/
> ではダメ?
これでできました。
ありがとうございます。
287デフォルトの名無しさん:2005/08/10(水) 01:29:23
>>273
> 後から「.xxx.yyyじゃなくて.ne.jpの時の方法も教えてください」とか言いそうな気がする
今回教えてもらった正規表現の応用だから、
わざわざ教えてくださいっていう必要はないと思うけど?
288デフォルトの名無しさん:2005/08/10(水) 01:31:23
説明が悪くてすまない。

>>275
> パターンが別にファイルか何かになってて、
> 正規表現読み込んで使うことになってるんじゃないのかなぁ。あくまで想像だけど。
> だから1本のパターンでしか書けない。
ちょっと違うけど、そんな感じの制約があるのです。

289デフォルトの名無しさん:2005/08/10(水) 04:34:49
>>283
> というようなことはできるのでしょうか?

できます
290デフォルトの名無しさん:2005/08/10(水) 07:59:13
Windows上でHDDの空き容量を外部コマンドを呼ばずに確認するやり方を教えてくださいな。
cpanのmoduleをいくつか見てみたけど、unix系OS依存のものばかりだったんで。
291デフォルトの名無しさん:2005/08/10(水) 08:21:47
>>290
このへんのどこかにない?
ttp://search.cpan.org/search?query=Win32&mode=module
292デフォルトの名無しさん:2005/08/10(水) 08:29:24
Win32::DriveInfoかWin32::AdminMisc入れるのはありですかー
293デフォルトの名無しさん:2005/08/10(水) 08:31:16
>>291
Thx.
Win32で探せばいいんですね。dfやらdisk spaceやらで捜してました。
294290=293:2005/08/10(水) 08:41:40
>>292
Thx.です。
Win32::DriveInfoを使いたいと思います。
295デフォルトの名無しさん:2005/08/10(水) 14:04:30
>>268
beとか分かりません
296デフォルトの名無しさん:2005/08/10(水) 17:40:47
1.あるページにアクセスすると発行されるクッキーをPerlで受信するにはどうすればいいか。
2.クッキーをサーバに送信するにはどうすればいいか。

use HTTP::COOKIES;
まで分かった。
297デフォルトの名無しさん:2005/08/10(水) 18:12:23
cpanにある参照したいモジュールのhtmlのリンクがぶつぶつきれているので
自分で作ろうかと思い、とりあえずperldocでhtml化するようなオプションなんぞ
あるのかなとおもって調べてみたんですが、みあたりませんでした。

perlにはjavadocなみのドキュメントhtml化ツールってありますか?
298297:2005/08/10(水) 18:28:44
すいません、かいけつしますた
299デフォルトの名無しさん:2005/08/10(水) 19:06:33
かいけつゾロリ
300 ◆TWARamEjuA :2005/08/10(水) 20:24:23 BE:653832-###
>>296
# --- 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のとある装置から引用。
301デフォルトの名無しさん:2005/08/11(木) 07:06:14
>>300
my $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

無理なようです。
302ヽ(´ー`)ノ ◆.ogCuANUcE :2005/08/11(木) 15:11:09
>>301
GET する前に 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();

コードが何やってるか理解しる。
303デフォルトの名無しさん:2005/08/11(木) 17:22:55 BE:496598279-##
>>302
#LWP-Cookies
304デフォルトの名無しさん:2005/08/12(金) 00:47:55
1,hoge,000,Hoge
2,foo,111,FOO
=,aaa,1,yy
なんてデータがあった場合

hoge,HOGE,foo,FOO,aaa,,yy
って単語を配列@aに格納する
ワンライナーを教えてください
305デフォルトの名無しさん:2005/08/12(金) 01:05:02
>304
仕様をもうちょい詳しく書かないと適当なコードしか書けんよ?
aaa,,y で , が 2 つ入ってるの何?とか、Hoge が HOGE になってるの何?とか。

>perl -ne 'chomp; $i = 0; push @a, grep { $i++ % 2 } split /,/;'
306デフォルトの名無しさん:2005/08/12(金) 01:06:45
すいません、カンマに意味はありません。

1行中に複数存在する英単語をファイルからすべてを
配列にとりこみたいです。
307デフォルトの名無しさん:2005/08/12(金) 01:21:03
>>305
-ne だと本当に取り込んだだけになるけど…
要求仕様には沿ってるね…
308デフォルトの名無しさん:2005/08/12(金) 02:52:42
LWPでファイルを送信する場合にはどうしたらいいんでしょうか?
モジュール等があったら教えて頂けると嬉しいです。。
309デフォルトの名無しさん:2005/08/12(金) 03:00:46
ごめんなさい。HTTP::Request::Commonですね。。
310デフォルトの名無しさん:2005/08/12(金) 07:34:58
>>304
2列目、4列目を格納 push @a, (split /[,\n]/,$_)[1,3] for @data;
アルファベットなら格納 @a = grep { /^[a-z]+$/i } split /[,\n]+/, join /,/, @data;
311デフォルトの名無しさん:2005/08/12(金) 08:28:33
単純に、$dataに全行ぶちこんで
@a = $data =~ /(\w+)/gs;
がいいんじゃないのかな
312デフォルトの名無しさん:2005/08/12(金) 11:37:35
Form上で選択したファイルを添付ファイルとしてMIME::Liteを使ってメール送信する際の関数を作ったのですが空の添付ファイルが送付されてきます。どうすればちゃんと送信できるのでしょうか?
添付ファイルは主に画像ファイルを想定してますが他のファイルも対応できるようならしたいです。使用するブラウザは主にネスケ、できれば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();
}
313デフォルトの名無しさん: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なんぞ、対応して欲しくも無かった。。。

314デフォルトの名無しさん:2005/08/12(金) 13:36:17
>>313
5.8.1以上ならuse encoding 'Shift-JIS';
315デフォルトの名無しさん:2005/08/12(金) 16:28:56
>>303
こっちじゃ動くよ。環境は?
HTTP::Response の中身がどうなってるか気になる。

>>313
> はっきり言ってUTF-8なんぞ、対応して欲しくも無かった。。。
俺は CSI 派だから Unicode なんぞ大嫌いだが、メリットの方が遥かに
大きいと思う。

> 漢字コードはあくまでも SJISしか認めないという前提の下で
これがそもそもナンセンスだということに、いい加減気が付くべき。
316デフォルトの名無しさん:2005/08/12(金) 22:20:42
>>315
OSの標準エンコーディング下で使い物にならない方がナンセンスだろ。
「日本語WindowsでPerlは使うべきでないのが標準」って立場で言うなら勝手だが、
いいのか? それで。
317デフォルトの名無しさん:2005/08/12(金) 22:59:43
だいたいPerlの中の人にとって、マルチバイトなどどうでもいいわけで

PHPでも使ってろ
318デフォルトの名無しさん:2005/08/12(金) 23:11:18
Perlの中の人ってなんだよ

死んでろ
319デフォルトの名無しさん:2005/08/13(土) 00:02:04
>>318の中の人はカルシウムが足りてないな。
320デフォルトの名無しさん:2005/08/13(土) 00:43:01
>>313のようなことを言っているやつに限って想定しているコード系は
JISのどの規格でもないなぞのコードだからなあ。
321デフォルトの名無しさん:2005/08/13(土) 15:05:05
窓は結構 Unicode で動く部分が増えてきたぞ
ファイルシステムとかはもう Unicode でやってるしな
そのうちメモ帳のデフォルトも UTF-8 になるんじゃないかね

好き嫌いはともかく、 Unicode 対応の必要性は増してきていると思うがね
322デフォルトの名無しさん:2005/08/13(土) 16:14:37
窓の場合、UnicodeはUnicodeでもUTF-16だけどね。
323デフォルトの名無しさん:2005/08/13(土) 21:24:49
馬鹿馬鹿しい質問なのは承知してますがお聞きしたいのです。
Perlにおいてサブルーチンのみを定義したファイルを.plで作成し、実質的な処理を行うファイルを.cgiで作成しています。

.plの中には現在10個程のサブルーチンが格納されています。
1個のサブルーチンの中にはおよそ100~200行程度の処理を記述してあります。(コメントを含む。)

この場合、以下の条件ではどちらの方がより良い方法だと判断されるのでしょうか。

>この.plファイルをこのままにしてrequireする
>一つ一つのルーチンをそれぞれ別のファイルに分散させ、状況に応じてrequireさせる

どなたか回答宜しくお願い致します。
324デフォルトの名無しさん:2005/08/13(土) 21:32:22
SelfLoaderを使う。
325デフォルトの名無しさん:2005/08/14(日) 15:17:17
>323
それは条件ではなくて選択肢じゃね?
大抵の場合、複数選択肢がある場合には一長一短があったりすると思うんだけど。
例えば、実行時のメモリ効率、実行時間、保守性、簡単さ、etc.
で、どれをどれぐらい重要視するかってのが条件になるんじゃないか?
326デフォルトの名無しさん:2005/08/14(日) 16:08:37
@a=(2,3,5);
@b=(1,2,3,4);
map {$tmp{$_}++} (@a,@b);
@intersect = grep {$h{$_}>1} keys %tmp;

積を求める部分、一行にしたくて悶々としてるんだけど、なんかない?
327デフォルトの名無しさん:2005/08/14(日) 17:52:17
>>326
一体何処で積を求めているのかが・・・「積を求める」でぐぐるとよいかも?
328デフォルトの名無しさん:2005/08/14(日) 18:06:39
>>326
普通、リストを持ってきて「積を求める」っつったら行列を思わせるので、
質問としてどうかと思うが。しかも %h なんてどこにもないし、

まぁいいや。2 つのリストで重複している要素を挙げろ、ということの
ようだけど、そのコードをそのまんま一行にするなら、こうかな。

@intersect = grep { ++$tmp{$_} > 1 } sort(@a, @b);

ただ、>>326 もこのコードも、@a や @b の中で重複要素があった場合
(ex. @a= (2, 3, 5, 5)) には誤った結果が返るのは分かってるよな?
329デフォルトの名無しさん:2005/08/14(日) 18:07:18
>>327
間違った。
map {$tmp{$_}++} (@a,@b);
@intersect = grep {$tmp{$_}>1} keys %tmp;
            ^^^^^
@aと@bの積集合を求めてるのです。
330デフォルトの名無しさん:2005/08/14(日) 18:38:01
>>328
sortいらない気がするけど、使うといいことあるの?
331デフォルトの名無しさん:2005/08/14(日) 19:41:53
何で一行なぞにしたいのだ?

これでよいなら。
my @intersect = (join(";", sort {$a <=> $b} (@a, @b)) =~/(?:(\d+)(?:;\1)+)/g);
332323:2005/08/14(日) 19:44:37
>>324
ああ、SelfLoaderがありましたね…すっかり忘れてましたorz

>>325
条件、じゃなくて選択肢 でした。すみません。

とりあえず私の方で重要視しているのは『保守性』と『実行時間の早さ』です。
分散させて状況により読み込ませた方が効率性は判りませんが時間短縮になるのかなぁと思ってるのですが、
Perlの中の人から見ればそれほど変化は無いのかな?
333デフォルトの名無しさん:2005/08/14(日) 20:23:00
>>332
> Perlの中の人から見ればそれほど変化は無いのかな?

ケースバイケース。測定すべし。
334デフォルトの名無しさん:2005/08/14(日) 22:26:52
>>332
あの、、、いつの時代でしょうか。
それくらいのコード量では、余程頻繁にそのcgiが叩かれない限り、
大した違いはありません。

保守性を取るなら、ファイルは別にしない方が良いでしょう
(もちろん中身によりけりですが)。
とすると SelfLoaderになります。

CPUが80MHz以下、メモリが32MB程度の時代なら、AutoLoader読み込み時に
スクリプトが遅くなるのを体感できました。
が、今は時代が違いますし、CGIなのでそれ以外の要素も多くなります。

気になるなら 333 の言うように測定を。
335328:2005/08/14(日) 23:25:54
>>330
あ、ゴメン。消すの忘れてた。気にしないでくれ。
336デフォルトの名無しさん:2005/08/16(火) 00:34:40
ソケット作ってHTTPサーバにごにょごにょ通信して最後まで読んだ後、
ソケットをcloseする必要ありますか?
337デフォルトの名無しさん:2005/08/16(火) 01:27:08
>>336
rfc2616
338デフォルトの名無しさん:2005/08/16(火) 01:38:44
>>336
close() の時にエラーが発生するケースもあるので、close() して
返り値を確かめるのがベスト。

>>337
レイヤが違うし。その RFC 読んだって何も分からないよ?
339デフォルトの名無しさん:2005/08/16(火) 01:57:44
keepaliveがらみの話じゃないのか
340デフォルトの名無しさん:2005/08/16(火) 03:39:38
たぶん
341デフォルトの名無しさん:2005/08/16(火) 13:12:37
そもそも相手がHTTPサーバなんだったらソケットだの
closeだので悩むよりLWPとか使った方がいいんじゃないかと。

342デフォルトの名無しさん:2005/08/16(火) 15:48:15
LWPってでかくて無駄が多いイメージがある。

質問です。
LWPでドキュメントのボディーをリアルタイムで読み込む方法ありますか?
イメージとしては、こんな感じです。

my $fh = ...;
while(read($fh, ...)) {
  ...;
}
close($fh);
343デフォルトの名無しさん:2005/08/16(火) 17:38:03
>>342
content_cbでどうかな
344デフォルトの名無しさん:2005/08/16(火) 17:52:22
いや、これからの時代、POEを究めるのが良いと思う。
345デフォルトの名無しさん:2005/08/16(火) 21:05:22
POEなんて1世代前のフレームワーク
346デフォルトの名無しさん:2005/08/16(火) 23:07:37
>>345
じゃあ今時は何がいいの?
347デフォルトの名無しさん:2005/08/16(火) 23:38:09
テキスト処理以上のことはPerl以外の言語でやるのが良い
348デフォルトの名無しさん:2005/08/18(木) 06:57:06
正規表現などでアルファベットの[a-z]みたいに、あ行をマッチさせるのに[あ-お]とやったらできません
何か方法はないでしょうか≧ω≦
349デフォルトの名無しさん:2005/08/18(木) 07:23:21
350デフォルトの名無しさん:2005/08/18(木) 07:47:29
>>349
サンクスです
のまイェイ☆
351デフォルトの名無しさん:2005/08/18(木) 12:07:43
use encodingが使えるなら、use encodingを使った方が楽だけどな。
m/[あ-お]/ で普通にマッチするから。
352デフォルトの名無しさん:2005/08/18(木) 18:20:57
komodoで日本語入力できないのでしょうか...コピペでは入力できるみたいですが・・・
edit->current file settingはutf-8にしてますー。
353デフォルトの名無しさん:2005/08/18(木) 18:33:40
>>351
ActivePerl の場合、use encoding を使ってると
デバッガ(-d)がクラッシュするんだな…orz
うちだけだろうか?
354デフォルトの名無しさん:2005/08/18(木) 18:51:10
Tk::NoteBookのlabelが5.8.7でずれて表示されるようになった。

ActivePerl 5.8.7使用。
355デフォルトの名無しさん:2005/08/18(木) 22:36:01
>>353
おまいだけ
356デフォルトの名無しさん:2005/08/18(木) 22:43:29
>>353
どれかのversionでこけて前スレあたりにActivestateにバグレポートを出したやつが
いたはず。
357デフォルトの名無しさん:2005/08/19(金) 00:03:59
ActivePerlってソース公開してるから
自分でリメイクすればいいじゃん
358デフォルトの名無しさん:2005/08/19(金) 00:06:39
>>353
\x{}でコード直接埋め込んでもだめ?
359デフォルトの名無しさん:2005/08/19(金) 00:34:52
>>357
クズは黙ってろ。
360デフォルトの名無しさん:2005/08/19(金) 00:35:53
何のためにソースが公開されているんだか・・・
361デフォルトの名無しさん:2005/08/19(金) 00:45:55
Vine 3.1 の標準で入っている Perl 5.6.1 を使っています。
子プロセスから親プロセスに文字列を渡したいのですができますか?

できるのでしたら、方法を教えていただけるか、参考になるWebなどを
教えてください。

よろしくお願いします。
362デフォルトの名無しさん:2005/08/19(金) 01:08:06
>>361
つ perlipc.pod
363デフォルトの名無しさん:2005/08/19(金) 01:42:45
>>362

THX!
"perlipc.pod"をキーワードに調べてみます。
364デフォルトの名無しさん:2005/08/19(金) 01:48:47
>>363
(゚Д゚)ハァ?
365デフォルトの名無しさん:2005/08/19(金) 01:55:38
>>363

> man perlipc

とか

> perldoc perlipc

とかタイプしてみろ。
366デフォルトの名無しさん:2005/08/20(土) 18:18:13
開発環境
Windows2K鯖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のバージョンが原因ということでしょうか?

それともなにか別の問題が考えられるのでしょうか?

以上宜しくお願い致します。
367デフォルトの名無しさん:2005/08/20(土) 19:29:18
っ[Spreadsheet::WriteExcel]
368366:2005/08/20(土) 21:57:32
>>367
なんとかめどが立ちました。
ありがとうございます。
369デフォルトの名無しさん:2005/08/21(日) 00:25:35
Windowsのコンソールでprint済みの直前の1行を消す方法ってありますか?
370デフォルトの名無しさん:2005/08/21(日) 01:18:24
あります。
371デフォルトの名無しさん: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 "内容不一致";
}

:このファイル比較はあくまで用例で、
:目的はこのような配列の中身比較をしたいと思っています。
372371:2005/08/21(日) 06:16:39
if( "@A" eq "@B"){ 一致 }

という方法はありましたが、速度とメモリを浪費しそうで…
373デフォルトの名無しさん:2005/08/21(日) 07:43:10
>>371
ループ回すのが不満な理由に興味がわくけれども。
ループで良けりゃこんなんでどうかな?

sub cmparr (\@\@) {
    my( $arref1, $arref2 ) = @_;
    $_ ne shift @$arref2 and return 0 foreach @$arref1;
    return 1;
}
374デフォルトの名無しさん:2005/08/21(日) 07:55:43
>>372
メモリはともかく、速度はそれが一番速そうだけどな。
375デフォルトの名無しさん:2005/08/21(日) 08:24:48
配列に流し込む前に、単なるバイト列として比較すればいいじゃん。
376デフォルトの名無しさん:2005/08/21(日) 11:01:54
>>371
diffコマンドじゃだめ?
377デフォルトの名無しさん:2005/08/21(日) 11:05:14
そういやファイル同士を比較するための File::Compare というモジュールがありますね。
diff コマンドのように色々オプションは付けられないようだけど。
378371:2005/08/21(日) 16:01:29
>>373-377
ありがとうございます。

>>373
なるほど、難しそうな…うぉなぜあんな所にandが!
と、コードを後ほどよく精読して参考にさせていただきます。

ループで回したくないわけでは無いのですが、も単に自分が
知らないだけのシンプルなステートメントがあったなら…
と思いまして。

>>374
そうですかぁ。文字列展開してるから遅いかなぁと思ったんですが。
小さい配列ならこれでいっかな。

>>375-376
了解です。今回は例が良くありませんでしたが、ファイル比較が
目的ではない為、また別のコーディングの際に参考にさせて頂きます。
(でもdiffは配列比較に転用できそうかな)
379デフォルトの名無しさん:2005/08/21(日) 19:10:09
>>378
文字列にすると
@a = ("",1,2,3);
@b = (" 1",2,3);
とかが同じとみなされる可能性がある。

grepとかmapとか使ったりして試してみたけどあんまり速度変わらん。
素直に>>373がシンプルで一番よさげ。
380デフォルトの名無しさん:2005/08/21(日) 19:16:08
>>373
それじゃ $arref2 の参照している配列の内容がなくなると思うが。
それでよければ良いのだが。
381デフォルトの名無しさん:2005/08/21(日) 19:33:18
@arr1 = qw/a b c/;
@arr2 = qw/a b c d/;
で真が返る
382デフォルトの名無しさん:2005/08/21(日) 20:30:48
こんなところか。
sub arraycmp (\@\@) {
    my ($a1, $a2) = @_;
    return 0 if ($#$a1 != $#$a2);
    my $i;
    $_ ne $a2[$i++] and return 0 foreach @$a1;
    return 1;
}
383デフォルトの名無しさん:2005/08/21(日) 20:32:48
384デフォルトの名無しさん:2005/08/21(日) 20:40:08
なんで誰もCPANモジュールを紹介しないんだ?
例えばコレとか。
ttp://search.cpan.org/~jkeenan/List-Compare-0.31/Compare.pm

385デフォルトの名無しさん:2005/08/21(日) 23:18:32
つーか$| = undef しろよ
386デフォルトの名無しさん:2005/08/21(日) 23:32:13
違った$/
387デフォルトの名無しさん:2005/08/21(日) 23:34:37
まさか$-
388デフォルトの名無しさん:2005/08/21(日) 23:35:24
何言ってんだ?こいつ
389デフォルトの名無しさん:2005/08/21(日) 23:39:31
すまん。俺387。
385でも386でも無いが、
棒が傾いて行ってたので( "|" → "/")、一個加えてみたかった。
390デフォルトの名無しさん:2005/08/21(日) 23:46:21
一つのオプションを複数個使いたい場合、たとえば
% sample.pl -a hogehoge -a fugafuga
としておいて、-a で指定した hogehoge と fugafuga を
一つの配列に入れたいです。

for 文で shift していけばなんとかできそうなのですが、
Getopt::Std では、そんなことできないですか?
391デフォルトの名無しさん:2005/08/22(月) 00:18:28
>>390
そもそも、そういう syntax はよろしくないと思うんだが。
392デフォルトの名無しさん:2005/08/22(月) 00:21:19
>>390
-a "foo,bar" みたいな感じでパラメータ渡して、
内部でsplitさせるとかどうなの?

いや、俺はWeb上で動くPerlしか作らないんで実際にそういう風に処理出来るのか知らないんだけどさ
393デフォルトの名無しさん:2005/08/22(月) 00:23:55
>>390
Getopt/Std.pmを眺めてみると、オプションをキーにしたハッシュを作って
いるみたいなので、同じオプションがあると上書きされるようです。
それと、オプションの使い方としては>>391さんの言うとおりかと思います。
394373:2005/08/22(月) 01:21:06
>>380,381
あんがと。穴まみれだった。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;
}
395デフォルトの名無しさん:2005/08/22(月) 01:32:30
>>388
わざわざ配列に代入しなくても、$/をundefにして$hogeに全部流し込めってことだろう。
それでeqで比較、と。
396デフォルトの名無しさん:2005/08/22(月) 19:27:03
>>366と同じような問題なんだが、

>>367の[Spreadsheet::WriteExcel] って書くだけですよね。
こっちはテンプレートがあってそこに入れ込む形で利用したいんだけど、
同じようにOLEがうまく使えなくて困ってるんだけど・・・
397デフォルトの名無しさん:2005/08/22(月) 20:59:13
>>395
いや、、、>>386で言いたいことは分かったが、
>>371
>:目的はこのような配列の中身比較をしたいと思っています。
って書いてあるんだからさ。
398デフォルトの名無しさん:2005/08/22(月) 21:52:05
>>394
それだと2番目の配列の要素がパラメータスタックにどかっと積まれてすごくイヤじゃないか?
両方リファレンスにすべきだと思われ。
399デフォルトの名無しさん:2005/08/22(月) 22:04:01
>>396
選べ。
1. Spreadsheet::ParseExcel がテンプレートに対応してることに期待する
2. Excel::Template で自前でテンプレートを作る
3. Excel を捨てる
400デフォルトの名無しさん:2005/08/22(月) 23:02:40
質問です。
tkでmainloopがはしったあとに、別の動作中の処理を監視したり、通知してもらって
mainloopがはしっているウィジェットにその状態を反映させるようなものを作ろうと
おもっているのですが、とりあえずそれを実現する手段としてプロセス間通信もしくは
スレッドしか思いつきません。
tkでその代わりになるようなものは容易されていないのでしょうか?
401デフォルトの名無しさん:2005/08/22(月) 23:59:12
after; repeat じゃ駄目か?
402373:2005/08/23(火) 00:00:21
>>398
>それだと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;
}

# ほとんど自分用のメモと化してる…。みんなごめんよ。
403デフォルトの名無しさん:2005/08/23(火) 00:25:56
404デフォルトの名無しさん:2005/08/23(火) 00:36:55
>>402
学ぶところがあるネタならメモでも結構だが、配列の比較なんて散々既出。
ヨソでやってよ。
405デフォルトの名無しさん:2005/08/23(火) 00:46:10
>>390です

やっぱりああいうオプションの使い方は変ですよね…。
データファイル
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の項目の両方をターゲットに絞り込みたいとき、
どうするのがスマートなんでしょうか…。
406デフォルトの名無しさん:2005/08/23(火) 01:01:47
pll になっているのはスルー
407デフォルトの名無しさん:2005/08/23(火) 01:13:27
>>405
>>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
408デフォルトの名無しさん:2005/08/23(火) 01:43:04
>>392 見落としていました。ごめんなさい。
>>407 ありがとです。これならXY両方同時のフォーカスもできそうですね。

409デフォルトの名無しさん:2005/08/23(火) 12:14:07
http://aaa-bbb-ccc.ddd.jp/

http://aaa.bbb.ccc.jp/

にperlで変換したいんですが、どうすればできますか?
410激マジ:2005/08/23(火) 12:21:24
$a = あどれす;

if( $a eq 'http://aaa-bbb-ccc.ddd.jp/' ){
  $a = 'http://aaa.bbb.ccc.jp/';
}
411デフォルトの名無しさん:2005/08/23(火) 12:26:51
>>410
早速、ありがとうございます。

すみません、aaa-bbb-cccの部分がいろいろ変化するので、
aaa-bbb-cccの部分を取り出して変更を行いたいのですが・・・

(例)
http://zzz-yyy-xxx.ddd.jp/
       ↓
http://zzz.yyy.xxx.jp/

などです。
412デフォルトの名無しさん:2005/08/23(火) 12:33:59
>>411
dddの方は変わらないのか?
「aaa-bbb-ccc」と「ddd」 の分割の条件・パターン・ルールは何なんだ?
例えば、最も左側にある「.」で分割とか、それなりに一般的な説明を書いてもらえないと
使い回しの効く一般的な回答は得られませんよ。
413デフォルトの名無しさん:2005/08/23(火) 12:39:42
>>411
$url =~ s{(?<=://)(\w+(?:-\w+)*)\.\w+} {
  my $host = $1;
  $host =~ tr/-/./;
  $host;
}e;
414411:2005/08/23(火) 12:39:48
>>412
説明不足ですみません。

ddd.jpのほうは変わりません。
つまり頭のサブドメイン部分のみ変化します。
ですので、おっしゃるとおり「最も左側にある「.」で分割」
になります。

「ハイフン」の部分を「ドット」に変換して置き換えたい
と思っています。
415デフォルトの名無しさん:2005/08/23(火) 15:50:22
>>413
やりたいことだけをきちんと書け。
$url =~ s/-/./g;
こういうことか?
416415:2005/08/23(火) 15:52:38
>>413すまそ、上は>>414+訂正。
$url =~ s/\.ddd//g;
$url =~ s/-/./g;
417415:2005/08/23(火) 15:54:28
gいらね;ddd.jpも変わる場合は>>413さんの。
418デフォルトの名無しさん:2005/08/23(火) 15:59:22
>>399
それはOLEが俺には使えないってこと?
それとも・・・OLE使っての処理が一般的じゃないってこと?

OLE使ってのEXCEL操作はあきらめろってことか・・・・orz
419411:2005/08/23(火) 17:43:00
>>413,415
まだきちんと動いていませんが、ありがとうございます。

シェル・スクリプトとかは大丈夫なんですが、
perlはさっぱりですみません。
squidのredirect_programにかませようとしてます。
420デフォルトの名無しさん:2005/08/23(火) 18:02:46
>>419
単なる正規表現の範疇だぞ。
sedも使えないのはわかってるから体裁繕わなくていいよ。
421デフォルトの名無しさん:2005/08/23(火) 18:52:07
>>420
ゃさすぃ
422399:2005/08/23(火) 19:28:22
>>418
Perl + OLE でトラブってるのに、なんで Perl でやりたがるのか理解に苦しむ。
VB でサクっと書けるだろ。プログラミングは手段だ。手段と目的を履き違えて
ないか?
423デフォルトの名無しさん:2005/08/23(火) 22:17:19
HIT000000001.3
======================================================
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...を見出しにして表示するには、どうしたらいいのでしょうか?
424デフォルトの名無しさん:2005/08/23(火) 22:44:27
>>423
宿題、仕事はヨソでやってよ。
425デフォルトの名無しさん:2005/08/23(火) 22:52:25
>>424
適切な解答だ。
426デフォルトの名無しさん:2005/08/23(火) 23:18:00
正規表現 /./s
とすると . が改行にマッチしますよね
/[^a]/s
とした場合にも改行にマッチしますか?
427デフォルトの名無しさん:2005/08/23(火) 23:24:11
>>426
自分で試すことが出来ないの?
428デフォルトの名無しさん:2005/08/23(火) 23:25:29
>>426
自分で試せば良いのでは…。ワンライナーか何かで。
答えはyes。
だって、[^a] でしょ? /s オプションが無くてもマッチするよ。
429デフォルトの名無しさん:2005/08/23(火) 23:27:26
>>427
できないから聞いてんでしょ
430デフォルトの名無しさん:2005/08/23(火) 23:32:52
>>429
じゃあ、Yes と No の両方の回答があったらどうするんだよ?
431423:2005/08/23(火) 23:53:01
ハッシュを使えばできそうなのですが、なかなかできません。
できればどなたか教えてください。よろしくお願いします。
432デフォルトの名無しさん:2005/08/24(水) 00:12:41
>>431
一式、本買って通読しなよ。
あんた、以前も何度か似たようなことここで聞いてるだろ。
ちっとも進歩してないじゃないか。
433デフォルトの名無しさん:2005/08/24(水) 00:16:32
>>431
ヒントだけ。

HITで HITの文字列を記憶。
Cellular の値をハッシュに記憶。
= が出たら、HIT-Cellularの値を表示して、ハッシュをクリア。

これを while で回すんだけど
最期に = の行が無いとハッシュに入ったままのものが残るので、、、
あとは自分で考えようネ。
434デフォルトの名無しさん:2005/08/24(水) 00:24:08
全てを解決する魔法の構文を教えよう。










while(1){}
だって何もせず回ってりゃ問題なんて起きない。
435デフォルトの名無しさん:2005/08/24(水) 00:28:30
>>434
「プログラムとまらないんですけど…」という質問が来る問題発生。
436デフォルトの名無しさん:2005/08/24(水) 01:22:02
ActivePerl で CPANモジュール取り込みって大変そう・・・
グーグルで検索した限り。

う~~ん・・
437デフォルトの名無しさん:2005/08/24(水) 01:49:56
>>436
つppm

見当違いだったらスマソ
438423:2005/08/24(水) 09:54:22
>>433
ヒントをありがとうございます。でもまだうまくできません。
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 
とするにはどのように直せばよいのでしょうか?
どなたか教えてください。
439デフォルトの名無しさん:2005/08/24(水) 10:48:19
>>438
惜しいな。ハッシュが更にハッシュを参照するように代入する所は
こんな風にすれば良いんじゃないだろうか。
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";
 }
}
440423 :2005/08/24(水) 12:38:46
>>439
できました!
本当にありがとうございます。
441418:2005/08/24(水) 16:46:10
>>422
結局はVBでサクッと書いたんだけれども、
やはりメンテナンスや変更等の際にVBを触るより<これもVBでの作成の仕方ひとつで違うが・・・
perlで変更できる方が利便性が高く良いと思って
Perl+OLEに執着してるし、Perl+OLEができないからって
VBに逃げたく無いって部分もあるんだよ。

まぁ折れはVB書けたから良いけど
書けないヤツはどうすれば良いんだ?とも思うのだけど。
442デフォルトの名無しさん:2005/08/24(水) 17:21:27
>>441
そんなに執着するんならバグレポートでも送れば?
オタクの事情なんか知ったこっちゃないよ。
443デフォルトの名無しさん:2005/08/24(水) 19:55:33
>>441
いちいち改造したりするのにコンパイルするのは確かに面倒だろうな。

ただ、逃げ先があるならおとなしく逃げという選択肢に甘えるのも手だよ
444デフォルトの名無しさん:2005/08/24(水) 20:18:27
初めまして。

初心者ですが質問です。

perlで1京以上の数を扱うにはどうしたらいいんでしょうか?

どなたか教えてください。
京を超えるとベキ数になっちゃうので。。。
445デフォルトの名無しさん:2005/08/24(水) 20:29:32
>>444
多倍長整数で調べてみれ
446 ◆U9KltwvfLI :2005/08/24(水) 20:33:26
>>445
…携帯からなんで調べれません…(T-T)
447デフォルトの名無しさん:2005/08/24(水) 20:46:48
Math::BigInt
448デフォルトの名無しさん:2005/08/24(水) 20:46:53
>>446
ネット環境を整えるか、ネットカフェなどで調べて下さい
449デフォルトの名無しさん:2005/08/24(水) 21:23:41
携帯だろうと黙ってhttp://google.com/
450デフォルトの名無しさん:2005/08/24(水) 21:29:19
ところで、Perlの整数演算って内部では倍精度浮動小数点型使ってたのか・・・知らなんだ
use integerしておいたほうがCPUに優しかったりするのかしら
451デフォルトの名無しさん:2005/08/24(水) 21:31:53
>>450
スクリプトにもよるけど、たぶん大して変らない
452デフォルトの名無しさん:2005/08/24(水) 22:05:57
なんでなにかと検索するさいはグーグルっていうの?
yahooじゃ駄目なのかしらん?
453デフォルトの名無しさん:2005/08/24(水) 22:19:36
>>452
検索性能が段違いだから。
あと、Yahoo!は検索サイトではなくポータルサイトなので、
ページを開いた時にいろんな無関係の情報がグチャグチャ出て
重くてウザい、といった理由もある。
454デフォルトの名無しさん:2005/08/24(水) 22:21:29
>>450
そうっすよ。
MS-DOSで使ってた時はコプロが使われる数少ないソフトの1つだった(w
(あとは1-2-3も使ってたっけ?)
iperl.exeとか使ってたけどね……。


>>451
そう?と思ったけど、確かに数値演算してる部分が少なければ変わんないか。
気になるならBenchmarkしよー >>450
455デフォルトの名無しさん:2005/08/24(水) 22:52:01
>>452
>検索性能が段違いだから。
ソースは?
456デフォルトの名無しさん:2005/08/24(水) 22:57:44
>>452
というか、そもそもスレ違いの質問だと思うぞ
457デフォルトの名無しさん:2005/08/24(水) 22:59:08
>>455
ま た ソ ー ス 厨 か
訳も分からんくせに一人前の口きくんじゃねえよ。
お前は一人寂しくソースカツ丼でも食っとけ。
458デフォルトの名無しさん:2005/08/24(水) 22:59:54
>>455
google
ソース の検索結果 約 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
459デフォルトの名無しさん:2005/08/24(水) 23:00:46
>>450
そんなことするより手前のスパゲッティーソースをなんとかしろよ




と言われた
460デフォルトの名無しさん:2005/08/24(水) 23:01:49
>>451
確かに今の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を間違えて、逆に重くなった!?と思っていたのは秘密
461デフォルトの名無しさん:2005/08/24(水) 23:03:59
>>458
Yahooはこっちだろうと。
ソースで検索した結果  ページ:約41000000件
http://search.yahoo.co.jp/bin/query?p=%a5%bd%a1%bc%a5%b9&fr=top&h=p
462デフォルトの名無しさん:2005/08/24(水) 23:06:10
Yahooは内部でGoogle呼んでるんじゃないの?だから性能はGoogle依存。
463デフォルトの名無しさん:2005/08/24(水) 23:10:28
>>462
最近は独自のを使ってる
ttp://www.itmedia.co.jp/news/articles/0405/31/news007.html

YahooがGoogleの拾ってないページを持ってたりすることも結構あるから、
場合によっては両方で検索したりすることもある漏れGoogle信者
464デフォルトの名無しさん:2005/08/24(水) 23:14:26
いつまでスレ違いを続けるつもりかねキミタチ
465デフォルトの名無しさん:2005/08/24(水) 23:22:09
悪いな、大将。ここで止めとくよ。
466デフォルトの名無しさん:2005/08/24(水) 23:36:48
>>462
だったら、yahooでもよくね?
467デフォルトの名無しさん:2005/08/25(木) 00:02:17
好きな方使えよ
468デフォルトの名無しさん:2005/08/25(木) 00:10:13
>>444
5.8系ならbigintプラグマなんてのもあったのか
469デフォルトの名無しさん:2005/08/25(木) 00:49:52
AとBの2つのファイル比較して
Bの行の単語がAのどこかの行にあったら
その行を出力させたいんだけど。

open(FILE1,$ARGV[0]);
open(FILE2,$ARGV[1]);
while(FILE1){
$hoge=$__;
while(FILE2){
$pattern=$_;
if($hoge =~ /$pattern/){
print "$hoge \n";
}
}
}
470デフォルトの名無しさん:2005/08/25(木) 00:59:02
open(FILE1,$ARGV[0]);
@f1 = <FILE1>;
close(FILE1);

open(FILE2,$ARGV[1]);
@f2 = <FILE2>;
close(FILE2);

foreach(@f1)
{
$i=$_;
foreach(@f2)
{
if($_ =~ /$i/)
{
print "$_\n";
}
}
}
こんなんどう?FILE1の存在行の分だけFILE2でまわすから効率悪いんだが
471デフォルトの名無しさん:2005/08/25(木) 01:01:04
あ、FILE1とFILE2が逆ぽ
472デフォルトの名無しさん:2005/08/25(木) 01:07:08
>>469
先にパターン一覧を読み込んでおいてそれぞれの行で回すのが一番手っ取り早いかな
こんな感じでどうだろ

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);
473472:2005/08/25(木) 01:08:30
リロードしろ自分orz
474デフォルトの名無しさん:2005/08/25(木) 01:52:06
sortしてからmergeしろ
475デフォルトの名無しさん:2005/08/25(木) 02:00:14
>>469
せっかくだから、最初に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);
476デフォルトの名無しさん:2005/08/25(木) 03:17:41
>>457
俺は盆休みに東京から福井県にあるヨーロッパ軒までソースカツ丼食べに行った。
マジで美味かったよ。
477デフォルトの名無しさん:2005/08/25(木) 13:01:14
>>476
くだんない話引っぱるなよ、夏厨。
478デフォルトの名無しさん:2005/08/25(木) 14:40:21
>>477
ごめんな。
479デフォルトの名無しさん:2005/08/25(木) 19:28:11
WindowsXPマシンで、おすすめのPerlの開発環境をいくつかあげるとすると、
みなさんなら、どんな構成になるでしょうか。理由込みで。
480デフォルトの名無しさん:2005/08/25(木) 19:51:52
>>479
幾つかも何も、現実的には ActivePerl 一択だが。
RAD ツールをお探しなら以下へ。

Perl書くのにどんなエディタ使ってる?
http://pc8.2ch.net/test/read.cgi/php/1014357485/
481デフォルトの名無しさん:2005/08/25(木) 21:24:38
Cygwin
482デフォルトの名無しさん:2005/08/25(木) 22:22:04
簡易WIKIのCGIを作って居るんですが、内容を編集するときに
http://hoge.com/のリンクを<a href="http://hoge.com/">http://hoge.com/</a>に置き換えることは出来たんですが
再編集すると、またhttp://に反応してしまって、リンクタグが変になってしまいます。
どうゆう風にすればいいでしょうか?スマートな方法とか、正規表現の例などをお願いします。
483デフォルトの名無しさん:2005/08/25(木) 22:29:54
編集させる内容をAタグ化しきゃいいだけじゃないの?
484デフォルトの名無しさん:2005/08/25(木) 22:43:04
>>480
terapad
485デフォルトの名無しさん:2005/08/25(木) 22:46:17
>>480
oedit
486デフォルトの名無しさん:2005/08/25(木) 23:13:27
>>483
説明不足ですみませんでした。<a href="http://">リンク</a>みたいなこともやるので、
タグにかこわれていない時だけリンクをしたいんです。
487デフォルトの名無しさん:2005/08/25(木) 23:15:40
>>486
ttp://www.din.or.jp/~ohzaki/perl.htm#AutoLink
タグで囲われてない のが条件ならこの辺どう?
488デフォルトの名無しさん:2005/08/26(金) 00:11:54
[^"\n]
ってダブルクォーテション、改行(0X0A)以外のキャラクタという意味で
良いんですか?
489デフォルトの名無しさん:2005/08/26(金) 01:11:19
>>487
なんだか難しくてよくわからないので自分で書いてみたけど、$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;
490デフォルトの名無しさん:2005/08/26(金) 01:47:46
いつも不思議に思うんだが、何でみんな正規表現で過剰にエスケープするんだ?
491デフォルトの名無しさん:2005/08/26(金) 01:53:00
文字クラス内ではエスケープする必要無いよって書けばいいんだよガキ
492デフォルトの名無しさん:2005/08/26(金) 01:55:32
それ以上に多すぎだろ馬鹿。
493デフォルトの名無しさん:2005/08/26(金) 01:57:07
そこは見てなかった悪い
494デフォルトの名無しさん:2005/08/26(金) 01:59:46
まあまあ。
なんだかんだ言ってもこのスレの回答者はいい奴ばかりなんだよ。
ソースカツ丼でも食べて落ち着いてくれよ。
495489:2005/08/26(金) 02:14:26
これだと文頭にURLが来る場合駄目そうな気がしてきました
どうしたらいいでしょうか
496ヽ(´ー`)ノ ◆.ogCuANUcE :2005/08/26(金) 02:46:13
>>489
Regexp::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;

とりあえず、こんなもんですか。
497デフォルトの名無しさん:2005/08/26(金) 03:56:05
>>495
拡張構文が使えるなら (?<!["'<=>]) でいけると思う。

それよりも、そもそもの設計をやり直した方がいいぞ。
例えば http://aaa/bbb?https://ccc/ddd?ftp://eee#fff みたいな
URI があるとおかしなことになる。RFC 3986 的にはおそらく valid。
498ヽ(´ー`)ノ ◆.ogCuANUcE :2005/08/26(金) 04:55:40
>>496
$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 を処理しないから、そこで切れちゃうけど。
設計の是非はともかく、やっつけ仕事でこういうのやりたくなる時って
あると思うけど。
499489:2005/08/26(金) 18:35:23
>>497さん>>496さん有り難う御座います。
497さんの方法で出来ました。ただそうゆうURLが出ると再編集のときにおかしくなりますね。
もうちょっと正規表現について勉強しようと思います。
500デフォルトの名無しさん:2005/08/26(金) 22:00:36
Perlならではのノウハウを習得するのに参考になったお気に入りの本ってなんでしたか?
501デフォルトの名無しさん:2005/08/26(金) 22:01:44
オライリー本
502デフォルトの名無しさん:2005/08/26(金) 22:06:19
PerlでGUIの実行ファイルを作成される方はいますか?
503デフォルトの名無しさん:2005/08/26(金) 22:07:08
>>501
たくさん、ありますね・・
504デフォルトの名無しさん:2005/08/26(金) 22:10:40
http://www.amazon.co.jp/exec/obidos/ASIN/0596001738/

これ最近出た奴だけど評判良いみたいだから勧めとく
505デフォルトの名無しさん:2005/08/26(金) 22:30:48
"Perl"でGUIプログラムなんて書けたっけ・・・?
506デフォルトの名無しさん:2005/08/26(金) 22:43:01
Perl/Tkと言う話?
507デフォルトの名無しさん:2005/08/26(金) 23:11:42
>>504
Encode.pmの作者がレビューしてるなw ここも見てるのかな。
508デフォルトの名無しさん:2005/08/26(金) 23:14:58
>>502
Tkとか
GUI::Loftとか
で、PARでexeにするとか?
509デフォルトの名無しさん:2005/08/26(金) 23:17:19
Win32::GUIなんてのも
510デフォルトの名無しさん:2005/08/26(金) 23:21:07
>504 >507
弾氏が評価してるようですね。
邦訳はいつ頃になるんだろう・・

はてなの人が翻訳した本が今度出るらしいですね。
方向としては>504と近いのでしょうか?

Effective Perl 、Perl CookBookってどうですか?
511デフォルトの名無しさん:2005/08/27(土) 01:30:04
>>510
両方ともオススメ。
クックブックは原著買っても良いかも。この手の本は分冊されてると
ちょっと使いにくいんじゃないかなと思うんで。安く済むし。
512デフォルトの名無しさん:2005/08/27(土) 11:48:18
おはようございます。
2進法から10進法、10進法から2進法に変換するには、どの様に記述すれば良いのでしょうか?
Perl云々以前の話だと思うのですが・・・
513デフォルトの名無しさん:2005/08/27(土) 11:55:52
検索で一発
514デフォルトの名無しさん:2005/08/27(土) 12:00:34
@kubun = ('1','0','0','0','1','0',・・・ ,'1');

具体的には上記の様な20項目程のスイッチがありまして、
それを10進法に置き換えてファイルに格納したいのです。
そのままcsv形式で格納しても良いのですが、スイッチを随時増やす予定なので。
圧縮が目的ですので8進法でも16進法でも問題ありません。

途中で送信してしまいました。

>>513
無い訳がないですよね・・・もう一度ググってきます。
515デフォルトの名無しさん:2005/08/27(土) 12:24:12
>>512
Perl以前どころか、10進法、2進法以前の話。
516デフォルトの名無しさん:2005/08/27(土) 12:55:38
>>514
packのb/Bかvecあたりを勉強するのがいいんじゃないかと。
517デフォルトの名無しさん:2005/08/27(土) 13:54:32
進数で圧縮したいなら Math::BaseCalc 使って
64進数へ変換すれば、速度落とさずに効果出ますよ
518デフォルトの名無しさん:2005/08/27(土) 14:00:55
PLESKのパワーパックのPGSQLにPERL経由でつながらないや
519514:2005/08/27(土) 14:24:54
>>516
packとunpackの使い方で、進数の変換が出来るのですね。
ヒントをありがとうございました。勉強してみます。

>>517
そのものズバリのモジュールがあったのですか。検索が全然足りませんでした。
速度が気になりますが、取り敢えずは関数で処理してみたいと思います。ありがとうございました。
520デフォルトの名無しさん:2005/08/27(土) 14:25:20
bit stringにしたい、っていう話なのかな?

直接可読である必要があるのだろうか。
521デフォルトの名無しさん:2005/08/27(土) 14:40:51
>>516
進数がどうこういうのが直接の目的じゃなくて1と0だけのデータ
を効率よく少ない記憶領域に詰めこみたいというのが本来の目的
みたいだから、perlならpack使うのが自然じゃないかな。
522デフォルトの名無しさん:2005/08/27(土) 15:08:16
スイッチとやらが随時増えるにしても、たかだか数十項目を圧縮する意味はあるものなのか?
523デフォルトの名無しさん:2005/08/27(土) 15:15:45
その数十項目の組が100万個ぐらいあったら意味あるんでねーの?
524デフォルトの名無しさん:2005/08/27(土) 16:19:05
っていうか、スイッチ自体をbit stringにするだろ、ふつう。
525デフォルトの名無しさん:2005/08/27(土) 16:43:49
Active Perl/Tkでプログラムを作っているのですが、
hoge.plをダブルクリックするとコマンドプロンプトが出るのですが
必要ないので出ないようにするにはどうすればいいの?
526デフォルトの名無しさん:2005/08/27(土) 16:45:13
wperl
527デフォルトの名無しさん:2005/08/27(土) 17:56:56
528デフォルトの名無しさん:2005/08/27(土) 20:42:38
$Fileに2バイト文字が含まれると

-e $File
が偽を返すようです。

対処法をご存知の方、よろしくお願いします。
$FileはTkのgetSaveFile()の返却値が入っています.
529時間があったらでいいわよっ、あ、でも来て欲しいな:2005/08/27(土) 20:43:17
VIPから来てあげたわよ

いまVIPが、世界が認めてない東海って名前を、
日本海に直してもらう作戦を行ってるのは、当然知ってるわよね?

VIPPERの力で、Googleが東海の単独表記を取り下げたのは有名ね。

でも、いまVIPは大きな問題を抱えてる。
ITスキル、特に鯖関係のものが、圧倒的に足りないのよ。

それでなんだけど・・・んちょっと、、、VIPに協力してほしいのよね。
べ、べつにあんただったから頼みに来たわけじゃないわよ!勘違いしないでよね!

でも、あなたの力があれば、日本海を取り戻すのが近くなるのは・・・確かだわ。
もし・・・協力してくれるんなら、このスレに書き込んでほしい。
http://ex11.2ch.net/test/read.cgi/news4vip/1125074145/

・・・・やっぱり、あなたに協力して・・・ほしいから。
530デフォルトの名無しさん:2005/08/27(土) 21:22:22
>>528
2バイト文字って、何? シフトJISのこと?
531デフォルトの名無しさん:2005/08/27(土) 22:01:58
GUI をなでしこで作って、イベント時にPerlを呼び出したりして。
処理結果はファイル経由でやりとり。
532デフォルトの名無しさん:2005/08/27(土) 22:28:41
糞重いな
533デフォルトの名無しさん:2005/08/28(日) 00:28:36
ハッシュやXMLの形式をとるデータをJSON(JavaScriptObjectNotation)の形式に変換する楽な方法を知りたいのですが・・
534デフォルトの名無しさん:2005/08/28(日) 01:13:09
>>533
ハッシュやXMLの形式を取るデータをJSONの形式に変換するモジュールを使うと楽ですよ。
535デフォルトの名無しさん:2005/08/28(日) 02:35:53
皆さんperlプログラムのデバックってどうやっています.?
数百行程度の小さなプログラムなら地道にprintできるけど
デカイものだとさすがにしんどい
536デフォルトの名無しさん:2005/08/28(日) 02:46:36
>>535
デバッガを使うといいですよ、っていうか。
小さな単位に分割して個別に攻めましょうよ。
537デフォルトの名無しさん:2005/08/28(日) 03:19:01
ごめん俺デバックはしたことないな
てかなんですかそれ
538デフォルトの名無しさん:2005/08/28(日) 03:27:33
deback backでない状態にすること。

なんだろう? 支援を中止すること? 推薦を取り消すこと?

de-buck? ドルをドル以外に変えること?
539デフォルトの名無しさん:2005/08/28(日) 03:54:41
デバッカ(w
540デフォルトの名無しさん:2005/08/28(日) 04:34:58
>>537
優秀なプログラマですね
541デフォルトの名無しさん:2005/08/28(日) 06:40:47
>>540
ネタにマジレスカコワルイが…

× デバック
○ デバッグ
542デフォルトの名無しさん:2005/08/28(日) 07:03:58
perlcc -o hoge.exe hoge.pl
で下記が出力され、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
543デフォルトの名無しさん:2005/08/28(日) 07:08:30
とても明確で分かりやすいエラーメッセージですな。
544デフォルトの名無しさん:2005/08/28(日) 07:16:46
アホか
545デフォルトの名無しさん:2005/08/28(日) 12:35:17
ちゃんとデバックしましょう
546デフォルトの名無しさん:2005/08/28(日) 13:31:23
>>542
PARとか使ったら?
547デフォルトの名無しさん:2005/08/28(日) 14:57:53
>>543
パソヲタから見ると明確で分かりやすいかもしれませんが
フツーの人から見ると全く不明瞭で分かりづらいです.
548デフォルトの名無しさん:2005/08/28(日) 15:04:25
アホか
549デフォルトの名無しさん:2005/08/28(日) 15:25:15
>>547
はいはい
550デフォルトの名無しさん:2005/08/28(日) 15:32:04
>>547
パソヲタが見てもさっぱりわかりません
ふつうの人が見てもさっぱりわかりません
多少プログラムをかじった人が見れば大体理解できる
プログラムで飯食ってる俺が見たら解決法まで瞬時に思いつく
551デフォルトの名無しさん:2005/08/28(日) 15:36:22
いづれにしろヲタでしょw
552デフォルトの名無しさん:2005/08/28(日) 15:39:06
はいはい
553デフォルトの名無しさん:2005/08/28(日) 15:39:51
542必死だな
554デフォルトの名無しさん:2005/08/28(日) 15:45:34
まあ
オプションでライブラリを指定しろってことだ
555デフォルトの名無しさん:2005/08/28(日) 16:10:44
『見つかりません』というエラーも判らない人が居るのはこのスレですか
556デフォルトの名無しさん:2005/08/28(日) 16:44:58
>>554
言うは易し
自分でやってみればわかるよ
557デフォルトの名無しさん:2005/08/28(日) 17:00:41
何のエラーも出ませんでした
558デフォルトの名無しさん:2005/08/28(日) 18:37:50
パス通ってないだけだろ。。
559デフォルトの名無しさん:2005/08/28(日) 23:29:20
前スレあたりで、use encodingとスレッドを同時に使うとPerlがこけるという
話がありましたが、やはりバグだそうです。
詳しい話を聞く時間はなかったのですが、グローバル変数が悪さしている
とか。5.10.xでなおるといいねえ。とのこと。
560デフォルトの名無しさん:2005/08/29(月) 00:19:30
>>558
言うはやすしって言うか
あんたライブラリがどのディレクトリにあるかわかってる?
そもそもライブラリって何かわかってる?
わかってるんなら perlcc -L /dir ***.pl でディレクトリ指定してやれば通るし
ていうかコンフィグファイルにフルパスで設定しとけばオプションなしでもいけるし
わかってないんならCとかコンパイルが必要な言語を基礎から勉強汁
561560:2005/08/29(月) 00:20:09
>>556だったわ
562デフォルトの名無しさん:2005/08/29(月) 00:23:54
>>560
perlcc -L /"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib" aaa.pl
こうやってもだめだったが・・・
563560:2005/08/29(月) 00:29:35
>>562
そこのディレクトリにエラーログで出た.libは全部入ってた?
564デフォルトの名無しさん:2005/08/29(月) 00:37:00
>>563
貴方はウマクいったの?
565560:2005/08/29(月) 00:43:46
>>564
俺は入れてない
スタンドアローンで動くプログラムならCで作ったほうがはるかに簡単だし
perlはインタープリタだからこそ使ってるからな
ぶっちゃけメリットが何一つない気がする
566デフォルトの名無しさん:2005/08/29(月) 00:45:51
perlcc は、技術的にはすごいが、実用的にはあまり薦められたもんじゃない。
567デフォルトの名無しさん:2005/08/29(月) 00:48:10
馬鹿かコイツ。
568デフォルトの名無しさん:2005/08/29(月) 00:52:00
もういいや、やったことないのに
あたかもやれるよみたいなやつ
ばっか
569560:2005/08/29(月) 00:53:44
>>568
だからライブラリを入手しろって
570デフォルトの名無しさん:2005/08/29(月) 01:17:03
開発に携わってる人には大変失礼なことだと思うが
perlccはソースを公開したくない時に使うと有用じゃない?
571デフォルトの名無しさん:2005/08/29(月) 01:26:46
て言うかそれくらいしか有効利用できないなくない?
ただそれなら別の言語で作ったほうがボリューム的にも格段違うわけだし
perlって割とシェルやawkと同じ感覚で使ってるんだけどな
CGIは別として
572デフォルトの名無しさん:2005/08/29(月) 02:00:29
.plとして保存したPerlScriptを、タスクトレイに入れた状態で起動する方法はありませんか?
PerlTrayとタスクトレイ格納ソフト以外で、あれば教えてください。
573デフォルトの名無しさん:2005/08/29(月) 02:13:15
>>559
ううっ。。。俺あのときバグ報告進められてたのに忘れてました・・・。
本当に申し訳ない。
574デフォルトの名無しさん:2005/08/29(月) 04:31:09
本当に忘れてただけか?
バグ報告はそれ相応の知識がないと(ry
575デフォルトの名無しさん:2005/08/29(月) 04:44:06
嫌な奴だな。
576デフォルトの名無しさん:2005/08/29(月) 05:05:08
よく言われるw
577デフォルトの名無しさん:2005/08/29(月) 06:00:18
人間と接する相応の知識がないようだな。
578デフォルトの名無しさん:2005/08/29(月) 11:02:25
不愉快に思う人が一人でもいるのなら、やるべきではないでしょう。
579デフォルトの名無しさん:2005/08/29(月) 14:20:14
じゃあ俺不愉快を訴える役ね。
580デフォルトの名無しさん:2005/08/29(月) 14:24:21
じゃあ俺こっそり不愉快に思う役ね。
581デフォルトの名無しさん:2005/08/29(月) 14:49:51
じゃあ俺不愉快にする役ね。
582デフォルトの名無しさん:2005/08/29(月) 14:51:35
不愉快を表明されるのは不愉快です。やめてください。
583デフォルトの名無しさん:2005/08/29(月) 14:55:37
おいおい、それじゃあ無限ループに陥るじゃないか。
584デフォルトの名無しさん:2005/08/29(月) 14:56:50
ほか行ってやれよ。
585デフォルトの名無しさん:2005/08/29(月) 15:51:26
これは何人での自演ですか?
586デフォルトの名無しさん:2005/08/29(月) 16:15:17
どうやら全て俺のようです
587デフォルトの名無しさん:2005/08/29(月) 16:59:39
お疲れ様でした
588デフォルトの名無しさん:2005/08/29(月) 17:03:07
○○
ー一
589デフォルトの名無しさん:2005/08/29(月) 17:19:49
まあたまにはこういう流れも面白いな。
590デフォルトの名無しさん:2005/08/29(月) 18:50:00
>>562
それは普通に駄目。
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を作る方法は知らん。
591デフォルトの名無しさん:2005/08/30(火) 03:54:34
データの先頭4バイトだけを取り出し16進表記にしたいです。
長さは8文字限定で足りない部分は0で埋めます。
今は下のようにしています。
もっと簡単にできるんじゃないかと思うのですが、どう書いたら良いのでしょうか?
$str = substr( $str, 0, 4 );
$str =~ s/(.)/sprintf( "%02X", unpack("C", $1) )/eg;
$str = substr( $str . '00000000', 0, 8 );
592デフォルトの名無しさん:2005/08/30(火) 10:16:48
尻に00000000付けてるのがわけわからん。

とりあえず1二ブル単位で表現するなら
print unpack("H*", substr($str, 0 ,4));
593591:2005/08/30(火) 11:03:58
すみません、説明が分かりにくかったかもしれません。

したいことは、データの先頭4バイトまでを丁度8文字の16進表記に変換することです。
入力の長さは不定です。入力が0バイトの場合も4バイトを超える場合もあります。
出力する16進表記の文字列の長さは常に8文字に揃えます。
出力が8文字に満たない(=入力が4バイトに満たない)場合は出力する文字列の末尾を0で埋めます。
具体的には以下のように変換されます。
 "" -> 00000000
 "a" -> 61000000
 "aaaaaaaaaaXYZ" -> 61616161

宜しくお願いします。
594デフォルトの名無しさん:2005/08/30(火) 11:35:38
なんだ数値は関係ないのか
print qq|"$_" -> |, unpack("H*", pack("a4",$_)),"\n" for ('', 'a', 'aaaaaaaaaaXYZ');
595デフォルトの名無しさん:2005/08/30(火) 12:09:21
LWP使ってウェブページを取得するとき、
特定のrefererを送信するにはどうすればいいんですか?
596デフォルトの名無しさん:2005/08/30(火) 12:17:39
perl -le 'print &{sub {if (1) {return do {1;1;}}}}'

perl -le 'print &{sub {for (1) {return do {1;1;}}}}'
1
perl -le 'print &{sub {if (1) {return do {1;}}}}'
1

一つ目の出力がおかしいんですが、どなたか説明できますか?
597 :2005/08/30(火) 13:34:03
>595
use LWP::UserAgent;

$ua = new LWP::UserAgent;
$response = $ua->get($url, Referer => $url2);
598デフォルトの名無しさん:2005/08/30(火) 15:23:56
>>596
何所で消えてるか調べようとしてたら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;
599デフォルトの名無しさん: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
600デフォルトの名無しさん:2005/08/30(火) 22:42:02
>>598
なんか、if (1) {} がオプティマイザによって、do {} になるみたい。
ちゃんとした条件入れると if文のまま。
この自動的な変換と、doの中に複数の命令がある時、というのがダメみたい…。
いまんとこ、それしか分からない。
601デフォルトの名無しさん:2005/08/31(水) 03:08:27
おもろいな。perl5.004でも起きた。5.003ではparse error。
さらに

perl -le 'print &{sub { if(1) { do {$foo=3}}}};' これも空表示になるが、
perl -le 'print &{sub { if(1) { do {$foo=3}}}}; print $foo' は 3 が表示される。

奥が深い…
602デフォルトの名無しさん:2005/08/31(水) 06:29:55
お前が今感じている感情は奥が深い症候群だ
603デフォルトの名無しさん:2005/08/31(水) 06:41:28
しずめる方法は俺が知っている。俺に任せろ。
604デフォルトの名無しさん:2005/08/31(水) 10:13:59
奥が深いっつーか…ただのバグだろそれは。
605デフォルトの名無しさん:2005/08/31(水) 15:05:32
またバクの話題ですね。
606デフォルトの名無しさん:2005/08/31(水) 20:15:13
LWP::UserAgent使ってるんですけど、
何秒か過ぎてもページが取得できてない場合は、ページの取得を終了させるにはどうすればいいのですか?
607ヽ(´ー`)ノ ◆.ogCuANUcE :2005/08/31(水) 20:58:07
>>606
マニュアル嫁。書いてある。
608デフォルトの名無しさん:2005/08/31(水) 20:58:55
「能力値(の絶対値)でボーナスを与える事でレベルアップ」の意味が分からん。誰か説明して。

そもそも能力値の絶対値ってなんだ?
609デフォルトの名無しさん:2005/08/31(水) 20:59:53
ごめん誤爆 orz
610デフォルトの名無しさん:2005/08/31(水) 21:04:36
これはまた壮大な誤爆でつね。
611デフォルトの名無しさん:2005/08/31(水) 21:05:04
>>608
よし、ちょっと調べてくる
612デフォルトの名無しさん:2005/08/31(水) 21:47:16
>>601
すまん。下のが当たり前すぎてマジで笑える。
613デフォルトの名無しさん:2005/08/31(水) 22:13:35
>>611
探すなwwww
614デフォルトの名無しさん:2005/08/31(水) 22:23:16
>>601
うわ、本当だ。
なんだよ下のコードwww
615デフォルトの名無しさん:2005/08/31(水) 22:50:40
>>607
アニュアルとか知りません
616デフォルトの名無しさん:2005/08/31(水) 23:13:50
>>615
perldoc で読めるということでしょ
617デフォルトの名無しさん:2005/08/31(水) 23:45:27
すみません。質問の仕方が悪かったです。
$ua->timeout($n)は試しましたが、何でか知りませんがn秒を過ぎても終了されない事があって非効率的なので、
別の方法があれば教えてください。
618デフォルトの名無しさん:2005/09/01(木) 00:37:15
>>617
ページによって差があるようなら、そこにブラウザなりtelnetなりでアクセスしてみては。
619デフォルトの名無しさん:2005/09/01(木) 06:51:42 BE:208240676-##
データベースからIPを取り込み、それを元にSSHでログインし、/sbin/ifconfig
コマンドを実行してログアウトするというスクリプトを作り、これをCronで実
行するという処理をしようとしています。

>>620に載せるスクリプトを、端末から実行するとうまく処理されるのにcronで動かす
と、/sbin/ifconfigを実行してくれません。

ログインまでは問題はないようですが、どこが間違っているのか判りません。

お願いします。
620デフォルトの名無しさん:2005/09/01(木) 06:52:39 BE:79330728-##
>>619のプログラム

#!/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();
621デフォルトの名無しさん:2005/09/01(木) 12:04:34
>>617
> n秒を過ぎても終了されない事があって非効率的なので、
> 別の方法があれば教えてください。
LWP::Protocol::http の中で select() を使っているので、これで駄目なら
他の方法なんか無いと思うけど。
622デフォルトの名無しさん:2005/09/01(木) 12:06:01
>>620
「ssh HOSTNAME /sbin/ifconfig -a」じゃ駄目なんか?
ログインのところだけ expect 使え。
623デフォルトの名無しさん:2005/09/01(木) 13:52:18
自分自身を次々にバックグラウンドで実行させたいのですが、どうすればいいでしょうか。
systemだと実行が終わるまで元のプロセスは止まってしまうので駄目なようです。
624デフォルトの名無しさん:2005/09/01(木) 14:02:14
>>623
fork
625デフォルトの名無しさん:2005/09/01(木) 15:57:49
>>624
ありがとう。
forkに関して質問ですが、
if($p = fork) {
wait;   
}elsif(1) {
print "ここは子プロセス\n";
}

waitがないと子プロセスは正常終了しないのですか?
waitがないとゾンビ化?

626デフォルトの名無しさん:2005/09/01(木) 16:32:33
>>625
その前に、なんで else じゃなくてわざわざ elsif(1) って書くの?
627デフォルトの名無しさん:2005/09/01(木) 16:40:56
>>619
シェルの問題とか、cron実行時のユーザとか、
スクリプト以外に確認する所がありそうな気がします。
628デフォルトの名無しさん:2005/09/01(木) 20:13:11
>>626
ごめん。

まぁ、とにかくforkで生成されたプロセスは普通に文末までくれば普通に死んでくれるよね?
629デフォルトの名無しさん:2005/09/01(木) 20:43:12
>>625
waitがないと子が終了後にゾンビ化したままになる。
親をwaitでブロックさせたくなければ SIGCHLD のハンドラを書いて
受け取ったらwaitするようにするか、または定期的に waitpid を
すれば良い。

注) 全てのOSでこのようになるとは限らない。上記はUNIX系OSでの話。
630デフォルトの名無しさん:2005/09/02(金) 09:19:24
もしくは

if ($p = fork) {
 wait;
} else {
 fork && exit;
# child
}

子の子は面倒みる必要ない。
631デフォルトの名無しさん:2005/09/02(金) 15:12:28
時間が掛かる処理してるときPerl.exeのウインドウが邪魔なんで、
裏(バックグラウンド?)で実行させる方法ありませんか?
Windows xpでactive perl5.8.7使ってます。
632デフォルトの名無しさん:2005/09/02(金) 15:18:13
バイナリファイルの種類?(画像ならjpgとかpngとか)を抜き出す方法を教えていただけませんでしょうか
image/pjpeg のような感じです。
633デフォルトの名無しさん:2005/09/02(金) 15:30:30
>>631
>>58-61

>>632
判断するってこと?
634デフォルトの名無しさん:2005/09/02(金) 15:30:39
system("file hoge.jpg");
635デフォルトの名無しさん:2005/09/02(金) 15:33:28
>>631
参考:http://www.google.co.jp/
備考:perl.exe バックグラウンド
636デフォルトの名無しさん:2005/09/02(金) 15:44:34
>>633
そんな感じです。
cgi-libと言う物を使えばup時に取得できますが、
既にアップロードされているものを何のファイルか再取得してみるっと言った感じです。

>>634
$enctype = system("file $files");
こんな感じで使ってみましたが、0が返ってきました。
使い方間違っていますでしょうか
637デフォルトの名無しさん:2005/09/02(金) 16:11:10
>>633,635
Win32::Console::Freeだと
一瞬、コマンドプロンプトが表示されるのが嫌なんだけど、どうにかならないかな。
638デフォルトの名無しさん:2005/09/02(金) 16:12:34
>>636
$enctype=`file $file`;
基本的な関数の動作位覚えよう。systemはコマンドの戻り値(主にエラーコード)が返って、出力は標準出力へ
639デフォルトの名無しさん:2005/09/02(金) 16:39:42
>>638
ありがとうございます。結果を取得する事が出来ました。
やっぱ【image/pjpeg】こんな感じで出すのは無理すかね^^;
とりあえずこの結果を正規表現でこれに近づけるようにしてみます。
640デフォルトの名無しさん:2005/09/02(金) 16:39:43
wperl.exe
641デフォルトの名無しさん:2005/09/02(金) 16:59:54
>>632
File::MimeInfo なんか使えないかな?
642デフォルトの名無しさん:2005/09/02(金) 17:21:12
>>636
Webサーバ経由で外部からアクセス可能な所に画像があるならばそのサーバに
HTTP で接続して HEAD でヘッダだけ取得すれば Content-Type: に image/jpeg
とか入ってるよ。
643デフォルトの名無しさん:2005/09/02(金) 18:08:04
>>641
ググッて見ましたが知識不足で・・・

>>642
出来ました、ありがとうございます。
644デフォルトの名無しさん:2005/09/02(金) 21:13:22
>>643
CPANモジュールの名前見てぐぐってんじゃねぇ。
CPANで検索しる
http://search.cpan.org/~pardus/File-MimeInfo-0.11/MimeInfo.pm
645デフォルトの名無しさん:2005/09/02(金) 22:31:58
>>644
MimeInfoが鯖に入っていない模様でした。
646デフォルトの名無しさん:2005/09/04(日) 19:05:54
>>645
use lib './';
647デフォルトの名無しさん:2005/09/04(日) 19:16:36
 「直リンが効かないのなら、トップページ
  http://search.cpan.org/
  に行って、MimeInfo を検索したらどうだろうか」

という程度のことも考えられないのだろうか。
648デフォルトの名無しさん:2005/09/04(日) 19:54:47
ある変数が1桁の数字の場合は頭に2つ「0」を付けて、
2桁の数字の場合は頭に1つ「0」を付けて、
3桁の数字の場合は何もつけないで出力したいのですが、
ifとか使わないで、簡潔に記述したいのですがどうすればいいですか?
649デフォルトの名無しさん:2005/09/04(日) 20:01:28
>>648
$str = sprintf ("%2d", $math);
これ?
650デフォルトの名無しさん:2005/09/04(日) 20:05:07
>>649
それだと頭にスペースが付くけど、
「0」が付いて欲しい。
651デフォルトの名無しさん:2005/09/04(日) 20:09:42
>>648
$str = sprintf ("%02d", $math);
これ?
652デフォルトの名無しさん:2005/09/04(日) 20:10:36
>>648
sprintf("%02d", $math);

おしかったな >>649
653デフォルトの名無しさん:2005/09/04(日) 20:11:22
>>651
それ。ありがと
654デフォルトの名無しさん:2005/09/04(日) 20:11:55
>>652
おしかったな
655652:2005/09/04(日) 20:14:11
>>654
print "orz " x 100, "\n";
656デフォルトの名無しさん:2005/09/04(日) 21:01:07
なんで03dじゃないんだ?
657デフォルトの名無しさん:2005/09/04(日) 21:02:53
>>656
質問あんま読んで無かっただけじゃないかと…
658デフォルトの名無しさん:2005/09/04(日) 21:23:27
サーバーから転送量激しいから何とかしてくれってメールきて画像系CGIの転送量がやばいらしいから該当CGIにトラフィック制御を付けようと思ってます。
そこで次のサブルーチンを作成してみました
[ $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;
}
659デフォルトの名無しさん:2005/09/04(日) 22:07:47
forkって失敗したら何を返してくれるの?
660デフォルトの名無しさん:2005/09/04(日) 22:09:01
spoon
661デフォルトの名無しさん:2005/09/04(日) 22:13:42
>>660
ふざけてないで教えてくれよ!!
マニュアル見んのめんどくせえんだよ!!!
662デフォルトの名無しさん:2005/09/04(日) 22:15:27
>>658

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
663デフォルトの名無しさん:2005/09/04(日) 22:19:51
>>662
了解です
664デフォルトの名無しさん:2005/09/04(日) 22:39:11
>>661
> マニュアル見んのめんどくせえんだよ!!!

英語のマニュアル読めないんだよ!と正直に言えば
教えてもらえるかもしれないのに
665デフォルトの名無しさん:2005/09/04(日) 23:45:11
解決方法

つ while(1){}
666デフォルトの名無しさん:2005/09/04(日) 23:59:59
fork while(1);
667デフォルトの名無しさん:2005/09/05(月) 00:24:13
while (1) {~}

for (;;) {~}
っておんなじだよね?
668デフォルトの名無しさん:2005/09/05(月) 00:25:04
違うよ
669デフォルトの名無しさん:2005/09/05(月) 01:09:38
>>667-668
おんなじだよ。

> cat test.pl
while(1){1}
for(;;){1}
> perl -MO=Deparse test.pl
while (1) {
  '???';
}
while (1) {
  '???';
}
test.pl syntax OK
670デフォルトの名無しさん:2005/09/05(月) 01:13:13
>>669
とすれば、最初から while (1) {} と書いたほうが良いのかな
671デフォルトの名無しさん:2005/09/05(月) 07:07:39
>>669
意味は同じだが、while(1) の方がより自然言語に近いからベター。
for(;;) って書く香具師、キライ。
672デフォルトの名無しさん:2005/09/05(月) 07:35:32
つうかfor(;;)は顔文字に見えて仕方が無い
673デフォルトの名無しさん:2005/09/05(月) 08:43:44
潤いがあっていいじゃないか。
674667:2005/09/05(月) 08:44:10
>669
ありがと。普段はwhile(1)って書くけど、web上で見つけたコードでfor(;;)を使ってるコードがあって気になってた。
つーか、
perl -MO=Deparse
こういうやり方あったのか。知らなかったから勉強になった。thx.
675デフォルトの名無しさん:2005/09/05(月) 11:21:18
> perl -MO=Deparse
おもすれーこれ
676デフォルトの名無しさん:2005/09/05(月) 14:19:19
最近のPerlのコーディング規約はJavaに近づいているのでしょうか?
677デフォルトの名無しさん:2005/09/05(月) 15:43:55
>667
while(1)が正解さ。
forはね、何かをカウントする時に使う。って使い分けが読みやすくす秘訣。
678デフォルトの名無しさん:2005/09/05(月) 15:46:47
Cはwhile(1)だとWarningがでるからその習慣でfor(;;)って書く人がいる
679デフォルトの名無しさん:2005/09/05(月) 16:33:04
1っていう謎の定数が出現するのが嫌な俺はfor(;;)派なわけだが。
680デフォルトの名無しさん:2005/09/05(月) 16:33:31
>>678
それは、よっぽどのヘタレコンパイラ。
今時のちゃんとしたコンパイラなら、Warningなど出ない。
681デフォルトの名無しさん:2005/09/05(月) 16:48:40
#define forever while(1) って書く香具師がいるけど、どう思う?
(#define forever for(;;) でも同じ)
ちなみに俺は書かない。
682デフォルトの名無しさん:2005/09/05(月) 16:56:23
>>681
俺も書かない。単なるアホだと思う。
でもそれ、Perlがやってることに非常に似てる。

「ここで "is" って書く代わりに、"are" って書けたら自然で良くね?」
「いいねぇ、追加しちゃえ。」
「ジャーン!Perlは更に自由度を手に入れました!どっちも同じ意味ですが。」
683デフォルトの名無しさん:2005/09/05(月) 16:57:09
Perlについての質問箱です。
Perlについての質問箱です。
Perlについての質問箱です。
684デフォルトの名無しさん:2005/09/05(月) 18:30:54
スコープの大カッコをどう書くか、くらいどっちでもいい話だ
685デフォルトの名無しさん:2005/09/05(月) 19:04:49
>>682
しかし、Perlほど英文ぽさを意識しておきながら
そこで「複数のブツ」にもisしか使えないとなると、
それはそれで思想的な一貫性に欠ける気もするし、難しいところだなー。
686デフォルトの名無しさん:2005/09/05(月) 20:28:08
@ARE
687デフォルトの名無しさん:2005/09/05(月) 22:15:34
for派とwhile派の宗教戦争がうざいので、
プリプロセッサのマクロで気分で変更してます><
688デフォルトの名無しさん:2005/09/05(月) 22:18:27
>>687
宗教戦争に負けないような、強い自己を持ちましょう。
689デフォルトの名無しさん:2005/09/05(月) 22:23:00
>>688
至言だね。
690デフォルトの名無しさん:2005/09/05(月) 22:24:41
前から思ってたんだけど、
print($a,$b,$c);

print $a,$b,$c;
って何が違うの?
691デフォルトの名無しさん:2005/09/05(月) 22:35:14
open TEST,'+<test.c' or die("error");
test.cは読み書き可能な状態なのにundefineが返してくるのは何で?
692デフォルトの名無しさん:2005/09/05(月) 22:38:30
691だけど自己解決しました
693デフォルトの名無しさん:2005/09/05(月) 22:53:09
そこでgotoの出番ですよ。
694デフォルトの名無しさん:2005/09/05(月) 23:12:00
open関数によって作成されたファイルのパーティションってどうなってるの?
695デフォルトの名無しさん:2005/09/05(月) 23:13:51
>>694
もう一度自分の質問を点検せよ。
696デフォルトの名無しさん:2005/09/05(月) 23:17:04
>>695
ミス

open関数によって作成されたファイルの権限ってどうなってるの?
697デフォルトの名無しさん:2005/09/05(月) 23:25:22
でふぉるとだと644とかその辺じゃないの?
698 ◆TUuAKJVzIM :2005/09/05(月) 23:53:36
DBIを使わずにPg.pmを使う利点とかありますか?
PostgreSQLを使用するスクリプトでPg.pmが使われているのを
DBIを使うように書き換えていきたいんですが。
699デフォルトの名無しさん:2005/09/06(火) 00:17:07
>>696
man umask
700デフォルトの名無しさん:2005/09/06(火) 00:30:48
>>698
そのスクリプトがDBD::Pg を直接叩いてるなら、狙ったのは速度でしょうね。

スクリプト --> DBI(Perl) --> DBD::Pg(Perl, XS) --> Postgres
スクリプト --> DBD::Pg(Perl, XS) --> Postgres

DBIで書き換えるのは賛成です。
メソッド名がDBIと揃ってるんじゃないかと思うので、そんなに労力要らないハズです。
701デフォルトの名無しさん:2005/09/06(火) 01:18:11
お前らかわいい
702デフォルトの名無しさん:2005/09/06(火) 01:28:13
>>700
おい。DBD::PgじゃなくてPgだろ。
703デフォルトの名無しさん:2005/09/06(火) 02:50:39
perlのソース読めば分かります.
704619-620:2005/09/06(火) 03:29:42 BE:277654278-##
>>622
>>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

遅くなりましたが解決しました。
ありがとうございました。
705デフォルトの名無しさん:2005/09/06(火) 18:00:26
解決後にその方法を書くのは、お礼を言うこと以上に素晴らしい。
706デフォルトの名無しさん:2005/09/06(火) 19:44:21
binmode
ってやって意味あるの?
やらないのと何が違うのか具体的に教えて。
707デフォルトの名無しさん:2005/09/06(火) 19:46:55
>>706
Windows(ActivePerl)だと問題が発生する
Cygwin/UNIXじゃ大丈夫だけどな

Windowsはテキストファイルとバイナリファイルを区別してるから
バイナリファイルを読み込むときはbinmodeしないとファイルを正しく読み込めない

とラクダ本に書いてあります
ラクダ本ぐらい買えよ
708デフォルトの名無しさん:2005/09/06(火) 20:26:54
ご質問というかご相談を。

1行でデータが羅列されているテキストファイルに改行をいれたいのです。
例えば 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);
709デフォルトの名無しさん:2005/09/06(火) 20:34:28
33697とか85の意味がわからんが
@gyoにファイルのデータをためこむとメモリ使用量が増大して実行速度は遅くなるだろうね
普通はbufferとか変数つくって1024byteごと読むとかがセオリーだけど

その処理なら
一行よんで一行(分割した行)を書き込むという処理がベストかと
710デフォルトの名無しさん:2005/09/06(火) 20:40:00
>>706
標準で有効になっているエンコード変換(の一種)を抑止する指示。
この変換は、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; 入れれ。
711708:2005/09/06(火) 21:11:53
>>709
あ、元のファイルは1行しかないんです。
85文字目までが1行の単位でそれが33697回繰り返してある1行のファイルなんです。

最初のファイルから1行読むってのは85文字目まで読むってことですか?
そうすると次は85~170まで次は~って感じですか?
712デフォルトの名無しさん:2005/09/06(火) 21:14:26
そういう感じ
Whileじゃなくてreadで85byteづつ読んだほうがいい
713デフォルトの名無しさん:2005/09/06(火) 21:32:29
> 708
while(<FILE>){ chomp; print OUTPUT $line,"\n" while ( $line = substr( $_, 0, 85 , q[] ) ) }
714デフォルトの名無しさん:2005/09/06(火) 21:38:58
>>708
約 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);
715デフォルトの名無しさん:2005/09/06(火) 22:26:01
714 のコードを 671 みたいな for(;;) 嫌いが書くと
while ( @data ){
printf ("%s %s %s\n" , ( shift @data, shift @data, shift @data))
}
になるのかな?

for(;;) というよりも添字がごちゃごちゃしてて嫌い。
716デフォルトの名無しさん:2005/09/06(火) 22:29:39
>>712,713,714
レスありがとうございます。

大体3MB弱のファイルなのですが、これが400ファイルほどあって。。。
出来るだけ処理速度を上げたいと思いまして。。。
改善の余地としては
@gyoのところで全部読まず1行づつreadで読み書きするようにするとメモリ使用量が少なくてすむ!
という感じですね。

readというものを知らなかったのでこれを使って少し改善してみたいと思います。

>>713さんのだと1行で出来ちゃうのですか?
私にはどんな処理を行っているかすぐに出てきませんOTZ
勉強していろいろ試してみたいと思います。

私の最初の記述でも>>714さんの位短く書けてしまうのですね。
参考にさせていただきますφ
717デフォルトの名無しさん:2005/09/06(火) 22:36:03
>716
こういう場合、ディスクのIOの方がネックになるのでreadでチマチマ読むより一気にメモリに読み込んで処理した方が速いんじゃなかろうか?
この程度だったらたいした差にはならないだろうけど。
718デフォルトの名無しさん:2005/09/06(火) 22:43:43
sysreadじゃなくてreadならバッファ入るからそれほど
気にしなくていいんじゃないかと。
719デフォルトの名無しさん:2005/09/06(火) 22:45:12
超富豪的解法。
perl -e 'local $/ = \85; print map "$_\n", <>' file1 file2 file3 ... > splited.log
720デフォルトの名無しさん:2005/09/06(火) 23:00:40
>>716
単純に処理速度を上げたいだけなら、717も書いているが
ファイルを一気に読み込むコードのままでもOK。

さらに処理速度を上げたいなら、
例えば ファイルを 100 個ずつ個別に処理し、
最後に結合するなども。
(要するに並列処理を。)

>>719
ワロタ
これで入力ファイルを1つずつにして、シェルスクリプトでファイルを1つずつ渡してやれば
十分現実的だね。

for i in file*.log; do perl -e ~ $i >> splited.log; done
721デフォルトの名無しさん:2005/09/06(火) 23:00:42
>719 ソレイイ!!
いや、マジで。
$/ に\数字使うって知らなかったよ。
map でなく、普通に while 使って
perl -ne 'BEGIN{$/ = \85}; print $_,"\n"' file1 file2 file3 ... > splited.log
で超富豪からちょっと慎ましく。
722712:2005/09/06(火) 23:03:38
「while 使って」っていってるくせに while 使ってないし。
-n オプション付けてるんでwhileループは省略してます
723722:2005/09/06(火) 23:17:41
721=722=723
712 と 721 間違えた。
ついでに 3M*400 = 1.2G となるとやっぱりネックはディスクへのアクセス。

out.txt を読み込みファイルと別のディスクにすると速くなるはず。
それと、100個ずつ並列処理なんかさせるとディスクのアクセスが不連続になって逆に遅くなるのでは?
724デフォルトの名無しさん: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に直接飛べるならそれに越したことはないのですが・・・
725デフォルトの名無しさん:2005/09/06(火) 23:37:18
>>723
読み込みの方に時間がかかるなら、たしかにファイルへのアクセスが不連続
になって遅くなるかも。
もちろん並列の場合のアルゴリズムは>>714に書いたように一気に読み込むものだけど。

どちらにせよ、速度の差は多分、出ても数倍のオーダーだろうね。
素直に直列(?)処理でよさそうだ。

出力ファイルのドライブを分けるのは、効果ありそうだね。
726ヽ(´ー`)ノ ◆.ogCuANUcE :2005/09/06(火) 23:42:44
>>724
元の質問はコレね?
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;

これでいいかね。
727デフォルトの名無しさん:2005/09/07(水) 00:04:54
0xを使う手もあるね
$str = pack("n",eval $str);
728724:2005/09/07(水) 00:06:12
>>726
できました。ありがとうございます!

需要はないと思いますが、私のミスを整理してみました_| ̄|○
1.pack関数にSJIS「あ」の文字コードを入れてみると、うまく変換された。
2.pack関数にEUC「あ」の文字コードを入れてみると、うまく変換されなかった(実際はコマンドプロンプト上で文字化けしてるだけ)
3.1と2の出来事から、pack関数はSJISしか受け付けてくれないものと勘違い
 ※pack関数の引数に"SJIS"とか"EUC"が必要なかったため、勘違いしてしまいました。実際は文字コード自動判別してくれるんですね。
4.そして泥沼へ・・・

ご迷惑をお掛けして申し訳ありませんでした。
729デフォルトの名無しさん:2005/09/07(水) 00:10:05 BE:2178454-###
splited ってなぁに?
730デフォルトの名無しさん:2005/09/07(水) 00:10:37
>>728
乙。
結果報告は重要だと思うので、しっかりお礼&報告する
姿勢はよいと思うぞ。
731デフォルトの名無しさん:2005/09/07(水) 00:28:54
だれにも食えもしないお礼なぞいらん。

結果報告だけでいい。
732デフォルトの名無しさん:2005/09/07(水) 01:46:53
>>707
ありがと
ところで、binmodeからテキストモードに戻す場合はどうすればいいの?
733デフォルトの名無しさん:2005/09/07(水) 05:30:01
>>732
binmode(IN, ":crlf")
734デフォルトの名無しさん:2005/09/07(水) 05:37:25
>>715
printf( "%s %s %s\n", splice @data, 0, 3 ) while @data;
じゃね?
735デフォルトの名無しさん:2005/09/07(水) 09:47:41
$hogeというファイルが存在しないのを確認して、
もし存在しなければ$hogeというファイルを作成→終了。
もし存在したなら$hogeに1を足してまた存在を確認、、、、
とえんえん繰り返していくようにするはどうすればいいですか。
736デフォルトの名無しさん:2005/09/07(水) 10:17:32
$hogeにどんな文字列が入ってるのかわからんから
「1を足す」の実際の動作やら何やらは特定できんが、
考え方としては

while (1) {
  if (-e $hoge) { ++$hoge; }
  else { open F, $hoge and last; }
}
737デフォルトの名無しさん:2005/09/07(水) 10:25:36
こんなのもありかな?
while (1) {
  next if -e $hoge++;
  open F, $hoge and last;
}
738デフォルトの名無しさん:2005/09/07(水) 10:29:06
おお、ありがとうございます。
さっそくやってみます。
739デフォルトの名無しさん: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とか使った方がいい
だろうし、どんどん作られていくなら別にカウンタもった方が効率的
じゃないかと。
740デフォルトの名無しさん:2005/09/07(水) 11:10:06
無限ループで本当にいいのかw

741デフォルトの名無しさん:2005/09/07(水) 11:15:18
質問者がそういってんだからいいんでね―の
742デフォルトの名無しさん:2005/09/07(水) 11:22:46
余計な気を回したり細部を掘り下げたりせずに
とっとと訊かれたことだけ答えたほうがこの場合よさげ。
743デフォルトの名無しさん:2005/09/07(水) 12:16:44
キモの部分が分かりやすければいいでしょう。
744デフォルトの名無しさん:2005/09/07(水) 12:44:36
binbinmode(ORE, "チ○ポ");
745デフォルトの名無しさん:2005/09/07(水) 16:09:11
>>744
die "Can't change mode.";
746デフォルトの名無しさん:2005/09/07(水) 16:33:09
>>744
sourou() if $mi-kosuri-han;
747デフォルトの名無しさん:2005/09/07(水) 16:43:30
print 〇ANKO $aieki;
748デフォルトの名無しさん:2005/09/07(水) 17:36:12
>>747
echo $haxahaxa;
749デフォルトの名無しさん:2005/09/07(水) 18:16:02
print ++$_ foreach @omaira = qw(D Q N);
750デフォルトの名無しさん:2005/09/07(水) 18:33:08
print 119.97.114.111.116.97.40.87;
751デフォルトの名無しさん:2005/09/07(水) 20:38:44
>>749
length 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
752デフォルトの名無しさん:2005/09/07(水) 20:48:40
select('ティッシュ');
753デフォルトの名無しさん:2005/09/07(水) 20:56:42
754デフォルトの名無しさん:2005/09/07(水) 21:14:46
do __FILE__;

オススメ。
755デフォルトの名無しさん: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をソートさせたいときはどうしたらいいでしょうか??
つまりテーブルの列の値で、行をソートさせたいのです。
756デフォルトの名無しさん:2005/09/08(木) 11:31:04
@array = sort { $a->{'c'} <=> $b->{'c'} } @array;

でもその例のままだとpushされてるのは全部同じハッシュへのリファレンスだから、
すべての@arrayの行が%hashの最新の状態、つまり
('a' => 16, 'b' => 17, 'c' => 18)になっちゃうよ。
757デフォルトの名無しさん:2005/09/08(木) 13:57:30
perlのpackってCで表現できる?
758デフォルトの名無しさん:2005/09/08(木) 14:54:10
Cは型に厳格で常時packを使ってるようなもの。でいいのかな。
759デフォルトの名無しさん:2005/09/08(木) 16:30:11
>>758
分からないなら答えなければいいのに。
760デフォルトの名無しさん:2005/09/08(木) 16:51:37
あるプログラムを cron で起動しています。
このプログラムのログ(成功とか失敗などなど)を syslog のように出力したいのですが、
一般的に log をとる場合はどのようにしているのでしょうか
761ヽ(´ー`)ノ ◆.ogCuANUcE :2005/09/08(木) 17:09:47
>>760
プログラムから STDERR に出力して、cron にログを取らせるのが一般的。
syslog のようにどころか、大抵の cron は syslog に丸投げ。
今時の UNIX 環境では、標準的な状態ではそうなっていると思う。

それは嫌だ、というのであれば、CPAN Search に行って syslog や log などの
単語で検索して、一度死ねばいいのに。
762ヽ(´ー`)ノ ◆.ogCuANUcE :2005/09/08(木) 17:11:14
> 単語で検索して、一度死ねばいいのに。
ごめん、これは誤爆(;´Д`)ちょっとメッセしてたもんで…
763デフォルトの名無しさん:2005/09/08(木) 18:48:04
>検索して、一度死ねばいいのに
どんな誤爆だ(w
764デフォルトの名無しさん:2005/09/08(木) 21:12:09
誤爆だとしても性格悪そう
765デフォルトの名無しさん:2005/09/08(木) 21:26:57
頭が性格に移ったんだろうな。
766708:2005/09/08(木) 22:23:53
>>708で質問したものです。
皆さんに言われ、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);
767デフォルトの名無しさん:2005/09/08(木) 23:28:08
>>766
解決乙。これでも良いのでは。

open(FILE,"<$file") or die "ERROR:そのようなファイルはありません。\n";
while(read(FILE, $gyo, 85)){
print OUTPUT $gyo, "\n";
}
close(OUTPUT);
close(FILE);
768708:2005/09/08(木) 23:36:43
>>767
あれ?>>767さんの見て今思ったんですが、自分の結局@allsに全部溜め込んでますね・・・・
何でそんなに差が出たんでしょう(汗
>>767さんのだと一行づつ読み書きする理想的な記述ですね!
769デフォルトの名無しさん:2005/09/09(金) 00:12:47
そこで>>719の技ですよ。

open(FILE,"<$file") or die "ERROR:そのようなファイルはありません。\n";
local $/ = \85;
print OUTPUT "$_\n" while (<FILE>);
close(OUTPUT);
close(FILE);

>>708 に関しては、文字列連結や正規表現が繰り返されてた
というのも速度に関係あるかもね。
770デフォルトの名無しさん:2005/09/09(金) 01:13:32
>> 708
いや、いくらなんでもその程度の処理に5分はかかりすぎだろ!
5分*400ファイル=2000分=約33時間.....

その上、$all=s/tests//g なんてやってるから同じデータがあると全部消されたり、
84,85文字目が「.*」だったらそこで終了するし....

ま、いずれにしろ、結果的に速くなったならいいか。

出来れば、どの処理で遅くなっていたのか報告が有れば嬉しいのだが...
771デフォルトの名無しさん:2005/09/09(金) 01:42:33
>>769
数値のリファレンスを $/ にセットして行入力演算子で
読むのは、素直に read を使うのより大分遅い。

- local $/ = \85;
- print OUTPUT "$_\n" while (<FILE>);
+ local $\ = "\n";
+ print OUTPUT while read FILE, $_, 85;
772デフォルトの名無しさん:2005/09/09(金) 04:09:45
Socketとかそういうのに関して詳しく解説してるサイトない?
773ヽ(´ー`)ノ ◆.ogCuANUcE :2005/09/09(金) 04:54:28
>>764-765
当たってるだけに笑えない(´Д`)

>>766
エラーメッセージは $! を使った方が良い。
open(FILE, "< $file") or die("ERROR: $file: $!");

>>772
まとまった解説は読んだ記憶がない。

基本的に、使い方は C 言語でのソケットプログラミングと同じなので、
それに関するドキュメントと、perldoc を読むと良いかと。
Net::* はSocket.pm 使ってたりするので、読むと参考になるかも。

あと、凝った事をする必要がないのであれば、IO::Socket とか、
楽な方向に逃げるのも一つの手。
774デフォルトの名無しさん:2005/09/09(金) 13:02:11
>>772
>Socketとかそういうのに関して詳しく解説してるサイトない?

あなたのマシンがそうです。
775デフォルトの名無しさん:2005/09/09(金) 19:55:46
>>766
>何が原因だったんでしょう?
$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)=''
に変更しただけのコードで速度を確認してみるといい。
776708:2005/09/09(金) 20:54:01
調査結果の報告を致します。
その前に、お詫びと訂正を・・・・_| ̄|○
最初の記述で5分は嘘でした。。。。
今日アバウトに計ってみると2分半位でした。

で、いろいろ試してわかったのですが、やはり
 $all=~s/$tests//g  
の部分が遅い原因でした。
これ以外の処理では、細かくは計っていませんが遅くても2秒より
遅くなることはありませんでした。
この1行の処理で2分30秒のほぼ全てを使っているとは・・・・・

ちなみに g を抜いた
$all =~ s/$tests//
の記述では処理時間4秒となり、やはり全てマッチを調べると
時間が掛かるみたいですね(汗

777デフォルトの名無しさん:2005/09/10(土) 09:53:10
777get
778デフォルトの名無しさん:2005/09/10(土) 10:47:25
ライブドアブログの
ブログを再構築(インデックス)をPerlで自動的にやりたいのですが、
どうすればいいでしょうか?
LWP使ってPOSTしてみましたが、その後返されるページのjavaスクリプトによって、
処理されてるみたいです。
779デフォルトの名無しさん:2005/09/10(土) 11:03:36
再構築はページにアクセスすることによって行われている。
だから、次のどのページにアクセスするか、ソースから正規表現でURLを抜き出して順次アクセスすれば良いと思う。
最初からアクセスするページをうち決める方法もあるが、月ごとのページなどを余分に生成することになるので、これはライブの鯖に優しくない。
自分で日時取得してURLを生成するのもアリ。
780デフォルトの名無しさん:2005/09/10(土) 15:20:35
Livedoorのことなので、アク禁されるかも…w
781名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:39:35
あるフォーマットを別のフォーマットに変換する

その際
A1 -> A2, "このパターンに対応した文字列"
B1 -> B2, "このパターンに対応した文字列"


みたいな感じに変換します。この時、今は、
データ構造として上の→の左側と右側で
それぞれ個別の変数に入れて、if 分で
対応させる関数作ってやってるんですが、
もうちょっと見通し良くするためには
どういうデータ構造にすべきでしょうか。
782名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:41:20
>>781
ハッシュじゃなくて?
783名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:45:42
ハッシュ構造にする場合、{ A => B } みたいにすると思いますが、
>>781みたいに、A => B, C みたいに1対多の対応付けはどう
やるんでしょう
784名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:47:46
>>783
%hash = (A => [1, 2]);
print $hash{A}[0];
みたいに匿名の配列参照するとか
785名無しさん@そうだ選挙に行こう:2005/09/10(土) 18:50:09
なるほど
ありがとうございます。
ハッシュで書き直してやってみます。
786名無しさん@そうだ選挙に行こう:2005/09/10(土) 21:34:43
mechanizeをCGIサーバに置くことはできますか。
787名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:15:09
>>786
> mechanizeをCGIサーバに置くことはできますか。

ぼくの自宅のCGIサーバには普通に置けます。
788名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:41:58
グローバル変数はダメといわれたので、use strictを使ってみました。
まだメリットがよくわからず、正直、面倒くさいんですが……

すると、$PI=3.1415926535,$E=2.71.... をほぼ全てのサブルーチンに書くことになってしまいました。
グローバル変数のままだとファイルの先頭の方に一回だけ $PI と書けば良かったのです。
今は sub でサブルーチンを定義するたびに$PI を定義する必要があります。

皆さんuse strictしたときに定数を使用するときにはどうされているのでしょう?
自分の考えとして
(1)全サブルーチンで定義する
(2)$PI と書いていたところをすべて $main::PI に置換
(3)sub PI{ return 3.1415926535 } として $PI を PI に置換
などがあると考えたのですが、他に何かいい方法は無いでしょうか?
プログラム全体で適用される定数用のマクロ定義みたいなのは無いのでしょうか。
789名無しさん@そうだ選挙に行こう:2005/09/11(日) 00:51:23
>>788
漏れはPIとか設定とかそう言うのであればuse strictした上でグローバル変数にするが…
グローバル変数が駄目ってのはグローバルにするべきでないローカルスコープであるべき変数の話じゃないかい?
790788:2005/09/11(日) 01:00:28
(4) use constant PI => 3.141592
(5) our $PI = 3.141592 ;
というのもあります。
ただ、(3)(4) は「$」で始まらないので、何か奇妙な感じがします。

>>789 さんが言われているのは(5)ということでしょうか?
グローバル変数はダメだといわれたので、まだ理由もよくわかんないままやってるのです。
やはり場合によってはグローバル変数使った方が良いときもありますよね?
791名無しさん@そうだ選挙に行こう:2005/09/11(日) 01:01:06
>>788
あースマソ論点がずれてたかな
use strict;しても同じパッケージ内なら普通にいけると思うんだけど・・・
何か勘違いしてる?

use strict;
my $PI = 3.1415926535;
hoge();
sub hoge {
print $PI;
}
792名無しさん@そうだ選挙に行こう:2005/09/11(日) 01:02:49
>>788
use constant使えよ... まあ中身は(3)なんだがね。
793788:2005/09/11(日) 01:18:19
あ、なんか勘違いしてたみたいです。
同一ファイルの中であればいちいち定義しなくても良いのですね。

ただ、別ファイルにして
require 'my_functions.pl';
して、そのなかで$PI を使うととエラーがでてしまいます。
これも my_functions.pl の先頭に1回書いておくと良いようです。
794名無しさん@そうだ選挙に行こう:2005/09/11(日) 01:30:31
package PI;
$value = 3.1415926535;
1;


こんな物を書いた奴をhoge.plとでもしてrequireすれば$PI::value で読めなかったっけ?
packageいまいち分かってないからよーシラネ
795名無しさん@そうだ選挙に行こう:2005/09/11(日) 01:34:21
>>793
BEGINブロックの中に入れてやれ
use strictはBEGIN節の中でチェックが走るからrepuireの実行時読み込みでは遅い
796名無しさん@そうだ選挙に行こう:2005/09/11(日) 01:50:34
$res795 =~ s/BEGIN節の中で/実行前に/;
間違えたorz
あと、use strictするようなPerl5環境で共通関数をrequireで取り込むのはあまり感心しないな。
出来ればモジュール化するべきだと思うよ
797788:2005/09/11(日) 02:06:50
「皆が言っているので、my、use strict、およびuse warnings を使用している」という
レベル5弱 のヘタレPerl 使いなのでモジュールの作り方がよくわからないんです。
require と use って、そんなに違うものなんでしょうか?

strict するような環境で require しないほうがいい理由もまだわからないのですが。
798名無しさん@そうだ選挙に行こう:2005/09/11(日) 02:10:50
そう思うならマニュアル読めよあほ
799788:2005/09/11(日) 02:19:01
use の場合、 require の後にimportすることまでわかりました。
これから perldoc perlmod 見て勉強します。
800795:2005/09/11(日) 04:52:54
スマソ…決定的な読み間違いをしていたことにいまさら気づいた…
吊ってきます('A`)
801788:2005/09/11(日) 05:54:48
>>795さんの
「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.


802788:2005/09/11(日) 05:55:32
結局、
BEGIN{ $main::PI=3.14 };
my $PI=3.14;
と、2回書いてやれば
main:3.14 req:3.14
となりました

BEGIN ブロックの中で $main::PI を定義していても、
my $PI=3.14; を書かなければエラーになるのが少し不思議な気がします。

803788:2005/09/11(日) 05:57:19
>>800 え?
804名無しさん@そうだ選挙に行こう:2005/09/11(日) 06:59:50
ファイルに対する書き込みでバッファリングしないようにするにはどうすればいいの?
805名無しさん@そうだ選挙に行こう:2005/09/11(日) 07:28:18
>>802
BEGIN{ $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して使うのが普通。


806名無しさん@そうだ選挙に行こう:2005/09/11(日) 07:43:45
>>778
http://cms.blog.livedoor.com/cms/rebuild/exec?blog_id=***&command=***
にアクセスすれば勝手にやってくれる
blog_id,commandのvalueは「ブログに設定を反映(再構築)」のソースみればオッケー^^
807788:2005/09/11(日) 08:28:48
>>805
ありがとうございます。

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 )なんですけど。
808名無しさん@そうだ選挙に行こう:2005/09/11(日) 11:35:07
素直にourでグローバル変数にしちまえばもう良いんじゃ・・・
809名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:13:02
>> 807
単に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
810名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:24:13
>>804
くわしく
811名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:27:04
$hoge1="{";
とか、完結してない正規表現を入れて
$hoge=~s/$hoge1/$hoge2/;
という命令をすると、
500エラーになってしまいます。
置換の段階で、どうしたら500エラーを回避できますか?
$hoge=~s/$hoge1/$hoge2/;
のあとに、
dieやらwarnやら入れてもうまくいきませんでした。
812名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:27:10
>>810
<わし<
813名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:32:24
>>811
eval{}を使うのはどうですか
814名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:47:40
>>813
くわしくおねがいします
815名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:52:37
>> 814

eval{$hoge =~ s/$hoge1/$hoge2/;};
print $@ if($@); #エラーメッセージをあれば表示
816名無しさん@そうだ選挙に行こう:2005/09/11(日) 14:56:58
ありがとうございます。
やってみます
817名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:06:11
ありがとうございます。
やってみます
818名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:28:02
>>811
メタ文字をquoteすればOK。

$hoge1 = quotemeta("{");
819名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:42:10
>>818

$hoge1 = "\{";じゃだめなの?
820名無しさん@そうだ選挙に行こう:2005/09/11(日) 15:46:10
>>819
それでもいいよ。
821名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:52:26
wperl.exe使って音鳴らすにはどうすればいいのですか?
perl.exeじゃ、\aを出力すればよかったけどwperlだと音がならない
822名無しさん@そうだ選挙に行こう:2005/09/11(日) 16:54:01
>>810
$|=1;
してもバッファリングするんですよ。STDOUTはバッファリングしないようになりますが。
Winです。
823名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:12:00
>>822
selectで一旦変えてやってる?
$oldfh = select(OUT); $| = 1; select($oldfh);
824名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:40:57
FileHandleのautoflushの方が判りやすいかな
825名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:56:40
>>823
だっさ
perlなんだからもうちょい”らしく”かこうぜ
826名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:18:52
select((select(OUTPUT_HANDLE), $| = 1)[0]);
827名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:26:26
>>825
かっこよさより判りやすさ重視でいいだろ。マターリしる。
828名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:32:37
>>826
ひどい・・・
829名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:59:24
ふん、まだ投票にも行ってないやつがなにカッコつけてんだか。
830名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:02:05
選挙特番っていつから?
831名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:05:24
>>830
20:00から
832名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:05:26
>>825
一応・・・perlfuncからのほぼコピペですよと
確かにらしくないというのは同意するけどね
833名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:19:35
Perlなんて大してスマートな言語じゃねえ
834名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:23:31
たしかにねえ。
ガムテープで張り付けてあるエンジンとか、
ロープで縛り付けてある翼とか、
格好悪いかもね。
835名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:25:50
でも、わりとプアなUnix環境だと、わりと最強なインタプリタ言語なのよね。
836名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:50:59
>>828
むしろ有名だから一瞬でわかってもらえると思うけどな。
837名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:17:04
汚いが何度も危機を助けられたよ>perl
838名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:23:01
俺も困ったときはいつもPerlだ
839名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:08:38
>>836
俺、マジで分からんわ。みんな一瞬で分かるようなもんなの?
どのコード?
840788:2005/09/11(日) 22:57:26
myとか、スコープとかについて少し調べた結果、
自分が基本的なことがわかってない上、その事を隠そうともせず
恥をさらしてたことがわかりました。スマソ。

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 使うのが簡単でよさそうです。

841788: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;

で動きました。

まだ勘違いしてるところがあったら、ビシビシつっこんでください。

842名無しさん@そうだ選挙に行こう:2005/09/11(日) 23:19:42
use strict;
$PI = 3.14;


の二行でサッと済む訳なので、わざわざ複数行に書かんでも・・・
勉強しようという姿は素晴らしいのだが、時には簡略するという術もしないとだめよん。
843名無しさん@そうだ選挙に行こう: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
844842:2005/09/11(日) 23:20:25
our($PI) = 3.14 だった。
$PIじゃ駄目だよね・・・orz
845名無しさん@そうだ選挙に行こう:2005/09/11(日) 23:29:02
>>843
17行目に記号間違い
36行目に}が多い
52行目に"が足りない
60行目 '''' なんだこりゃ

もうねアボカド、バナナかと
846名無しさん@そうだ選挙に行こう:2005/09/11(日) 23:34:54
>>843
主な問題は>>845が言ってるからいいとして・・・

print "</body></html>\n";
↑<body>は何処行ったの?


後 sub error{}について。
&error('0'); で呼び出してるみたいだが、'0'を引数にしてやる必要性なくないか?
&error; 又は &error(); で良いような。
汎用性を持たせたいなら引数にエラーメッセージを渡してやるなりとあるが、それはまた別の話
847名無しさん@そうだ選挙に行こう:2005/09/11(日) 23:36:16
汎用性を持たせたいならPerlを使うな!
全てCで書け
848名無しさん@そうだ選挙に行こう:2005/09/11(日) 23:38:40
>>846
'0' を引数にするのは、
('0') が顔に見えるからじゃないかな。
849788:2005/09/11(日) 23:41:52
>>842,844
ありがとうございます。

すでに840にも書いているように、自分も our 使おうと思ってます。

805さんが「useして使うのが普通」とかおっしゃっているので、
自分の弱点克服のためにも勉強してみたのです。
(あんまり普通じゃないんでしょうか?)

Perl にはいろんなやり方があるので、場合によって読みやすさや、汎用性等メリット、デメリットを
考慮しながらやり方を選択出来るようになればいいなぁ。と思ってます。
850デフォルトの名無しさん:2005/09/11(日) 23:56:41
いまいちよくわからんのだが
ourで変数宣言しないとmainパッケージの
範囲でしか適用されないの?
851デフォルトの名無しさん:2005/09/11(日) 23:59:33
じゃあ、死ね
852デフォルトの名無しさん:2005/09/11(日) 23:59:35
use strict時は、my又はlocalで宣言する事を強制される。(use vars, our等を除く)
宣言された変数がどの程度の範囲まで通用する物かはmyはlocal等に関するマニュアルでも読め。
853デフォルトの名無しさん:2005/09/12(月) 00:02:17
>>845,846,848
レスありがとうございます。
指摘されたとこを修正したつもりなんですが、エラーとなってしまいます。
もう自分でも何がなんだかわからなくなってしまいました。
どうかお力を貸していただけませんか。
854デフォルトの名無しさん:2005/09/12(月) 00:03:27
>>853
指摘されてるのはどれも基本中の基本な気がするのですが・・・
855デフォルトの名無しさん:2005/09/12(月) 00:05:11
じゃあ、死ね
856デフォルトの名無しさん:2005/09/12(月) 00:10:04
>>845,846,848
レスありがとうございます。
指摘されたとこを修正したつもりなんですが、エラーとなってしまいます。
もう自分でも何がなんだかわからなくなってしまいました。
どうかお力を貸していただけませんか。
リンク貼り忘れましたm(__)m
ttp://www5e.biglobe.ne.jp/~kokotubo/upbbs/img/91.txt
857デフォルトの名無しさん:2005/09/12(月) 00:13:49
>>856
答えたらそんな質問で埋め尽くされる。

答えて欲しかったらhttp://www.hatena.ne.jp/でポイント使って聞けば?
みんな親切に教えてくれるよ
858デフォルトの名無しさん:2005/09/12(月) 00:14:25
>>856
とりあえず動かしてみたが処理自体は出来ている。俺が言えるのはただそれだけだ
859デフォルトの名無しさん:2005/09/12(月) 00:25:57
>>858
まともに動かないです(汗
accsesslog.txtも作られないし。。。
Content-type: text/html
記録ファイルの入出力にエラーが発生しました.
とブラウザに表示が出ます。
860デフォルトの名無しさん:2005/09/12(月) 00:31:25
自己解決しますた
861デフォルトの名無しさん:2005/09/12(月) 00:59:51
いいかげん ”しますた ”なんて表現止めれば
マジ オタクっぽいよ
862デフォルトの名無しさん:2005/09/12(月) 01:10:51
つ「鏡」
863デフォルトの名無しさん:2005/09/12(月) 01:23:51
とりあえず現状でのエラーは
Perlのエラー出力

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
となっております。
どなたか分かる人、力をお貸しください。
今日はこのへんで。
864デフォルトの名無しさん:2005/09/12(月) 01:25:00
>>863
英語の勉強しる。
865デフォルトの名無しさん:2005/09/12(月) 01:25:19
英語読めばわかるじゃん
866デフォルトの名無しさん:2005/09/12(月) 01:26:10
>863
どれも、一度しか使ってない変数だけど、打ち間違いじゃねぇか?ってメッセージ。
867デフォルトの名無しさん:2005/09/12(月) 01:29:10
Perl言語に詳しい人に質問!
http://pc8.2ch.net/test/read.cgi/tech/1037383722/397-
は放置かよ・・・
868デフォルトの名無しさん:2005/09/12(月) 01:36:45
>>867
放置もなにも、スレが違う。
869デフォルトの名無しさん:2005/09/12(月) 01:51:19
>>868
マルチだと言っとるんだ
870デフォルトの名無しさん:2005/09/12(月) 01:55:23
マルチのなにが悪いの?
おまいが使っているOSもマルチタスクちゃんうんかい?
871デフォルトの名無しさん:2005/09/12(月) 02:06:05
またこいつか
872デフォルトの名無しさん:2005/09/12(月) 02:48:12
自己解決しますた
873デフォルトの名無しさん:2005/09/12(月) 04:46:08
>>872
なんかしらんが、乙。
874デフォルトの名無しさん:2005/09/12(月) 04:52:20
注:このスレはコンパイラではありません
875デフォルトの名無しさん:2005/09/12(月) 08:32:21
その通り。
コンパイラなんて上等なもんじゃないよ、ここのクソ回答者はw
876デフォルトの名無しさん:2005/09/12(月) 10:58:15

ってなんですか?
877デフォルトの名無しさん:2005/09/12(月) 11:15:31
アルファベットって知ってる?
878デフォルトの名無しさん:2005/09/12(月) 11:16:21
いえ
879デフォルトの名無しさん:2005/09/12(月) 12:12:49
>>876
いまちょっと仕事が暇だから、釣られてやろう。
http://www.media-k.co.jp/jiten/
ここを端から端まで100回読めば、少しは賢くなるぞ。
880デフォルトの名無しさん:2005/09/12(月) 12:19:24
>>856よ。
このスレで、まともなアドバイスを得たければ、ソースを短くしろ。
例えば、この最初の部分....
>($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が得られたならば、この部分を削って、
ソースを短くしろ。このようにして、問題のある部分を顕在化した数行程度の
ソースを作れば、まともなアドバイスが得られるだろう。
881デフォルトの名無しさん:2005/09/12(月) 12:20:30
たったこれだけのソースが長いとは・・・

882デフォルトの名無しさん:2005/09/12(月) 12:35:09
無駄に長いのは確かだ。
いかにもKENTの負の遺産って感じの内容。
883デフォルトの名無しさん:2005/09/12(月) 12:40:56
>>882
プログラミングを語りたいならまず20万行書いてから
http://pc8.2ch.net/test/read.cgi/tech/1124748243/
884デフォルトの名無しさん:2005/09/12(月) 12:52:28
たくさん書いて、書いたなりに成長してきた奴は
現在こんな無駄に長いコード書かんだろ。
885デフォルトの名無しさん:2005/09/12(月) 15:01:33
>>880
指摘されたようにソースを短くしたら、
Error 500
CGI エラー - 標準出力に何も出力されていません。
となります。
886デフォルトの名無しさん:2005/09/12(月) 15:10:06
$iが0~6まで1つずつ増えていくのを利用して
それに呼応するような、スカラー変数と配列変数を7つずつ作りたいんですがどういう方法がありますか?
$hoge[$i]とか@hoge[$i]では、べつの意味になってしまって困っています。
887デフォルトの名無しさん:2005/09/12(月) 15:57:49
>>886
やりたいことがよくわからん。
別の名前を持った変数を作りたいなら、${"hoge$i"}とか配列も同様に。ただしお勧めできないな。

それとも、やりたいのはこういうことかな。
my @hoge;
$hoge[$i] = {SCALER => 'hage', ARRAY => ['foo', 'bar', 'baz']};
print $hoge[$i]{SCALER}, $hoge[$i]{ARRAY}[0];
888デフォルトの名無しさん:2005/09/12(月) 16:13:35
>>886
use strict; を使ってるなら、

for (0..6) {
  no strict 'refs';
  ${"hoge$_"} = 1;
}
print $main::hoge0;

使ってないなら

for (0..6) {
  ${"hoge$_"} = 1;
}
print $hoge0;

---
887も書いてるが、上の方法はあまりお勧めではない。
配列やハッシュの要素にすると、一括処理しやすいというメリットもあるし。
887の下のようにハッシュを使うのをおすすめ。
889デフォルトの名無しさん:2005/09/12(月) 17:39:17
いまどき20万行書く方がアホだと思うが…
890デフォルトの名無しさん:2005/09/12(月) 18:28:56
仕事で何度も保守を繰り返してきた結果数万行になったPerlコードが動いてるのを見ると、どうしようもなかったんだろうなぁと
891デフォルトの名無しさん:2005/09/12(月) 19:30:01
4万行あったコードを、既存のモジュール使いまくりにコード整理にと
やって、6000行にシュリンクしたことがある。
892デフォルトの名無しさん:2005/09/12(月) 19:35:19
>>889
人生で通算20万行って話では?
893デフォルトの名無しさん:2005/09/12(月) 19:45:37
設計がもうできていて
コーディングするだけなら一日2000行は書ける
894デフォルトの名無しさん:2005/09/12(月) 19:52:56 BE:1742944-###
print
map
sprintf(qq|%02d\n|),
(0 .. 99);

無駄に行数を稼いでみるテスツ。
895デフォルトの名無しさん:2005/09/12(月) 20:02:14
>>892
いや、例の20万行スレへの誤爆だろ。
896デフォルトの名無しさん:2005/09/12(月) 20:05:52
設計を完了(もしくは構想を完了)していざ書くぞーっていう気になってるときは2000行でも何千行でも書ける。
でもその後しばらくしてくるとやる気失って1日10行書くのも億劫になる
897デフォルトの名無しさん:2005/09/12(月) 20:29:39
行数騙りたければこっちに逝け

プログラミングを語りたいならまず20万行書いてから
http://pc8.2ch.net/test/read.cgi/tech/1124748243/
898デフォルトの名無しさん:2005/09/12(月) 20:59:16
% perl -e 'print ";\n" x 200000;' > hoge.pl
899デフォルトの名無しさん:2005/09/12(月) 21:08:45
レスがなくなったのでもう一度載せます。
心の優しい人、間違っている構文をチェックしてください。
もう自分の力じゃどうにも出来ないで困っています。

ttp://www5e.biglobe.ne.jp/~kokotubo/upbbs/img/93.txt
900デフォルトの名無しさん:2005/09/12(月) 21:11:52
5.8.6.811-MSWin32-x86-122208.msiをインストールして
これからPerlを勉強しようとしてるのですが、
パッケージをインストールしようとしたのですが下のようになります。

win32-apiをインストールします
Error: No valid repositories:
Error: 500 Can't connect to ppm.ActiveState.com:80(connect: Unknown error)

zip形式でパッケージが入手できると聞いたのですが、どれが目的のパッケージかわかりません、
ご存知の方教えててください。
901デフォルトの名無しさん:2005/09/12(月) 21:14:08
>>899
自分でやれって事で終了だったでしょうに…。
ここの板の人達をデバッガに使うつもり?

ちゃんとしたエディタでも使って、自分でやんなよ。
他の人に頼ってたら、いつまで経ったも書けないぞ。
902デフォルトの名無しさん:2005/09/12(月) 21:25:29
>>901
終了だったんですか?
別にそんなつもりはないですけど、力を貸して欲しいんです。
ではこの板は何のために存在するんですか?
そもそも覗いてて、そうゆうレスしか返さない人は意味ないと思います。
指摘されて習得することも多いと思います。
だからこうやって罵られても投稿するんです。
自分は低脳の猿なんで温かく見守ってください。
903デフォルトの名無しさん:2005/09/12(月) 21:26:23
>>899
問題が再現する最短のコードのみを書くべし。
904デフォルトの名無しさん:2005/09/12(月) 21:29:09
英語くらい読めよな
905デフォルトの名無しさん:2005/09/12(月) 21:29:37
>>902
used only once: possible typo でググったら一発で解決なのだわ
906デフォルトの名無しさん:2005/09/12(月) 21:34:03
>>902
used only once っていう英文の段階で"何かが1回しか使われてないのか?"くらい判れ。
…いや、それが分からなかったとしても "tmp.pl syntax OK"と正常終了していることぐらい判れ。


自分を低脳だと言うのはどうでもいいが、それすら読めなきゃ同類にされる猿がかわいそうだ。
907デフォルトの名無しさん:2005/09/12(月) 21:39:38
>>899
http://pc8.2ch.net/test/read.cgi/tech/1037383722/
で待ってるからここにはもう書き込みするな。
908デフォルトの名無しさん:2005/09/12(月) 21:42:47
>>902
警告の意味はわかってるんですが、tmp.pl syntax OK
と出ているのに正常動作しないから困っているんです。

ソースにも書いてあるとおり「accesslog.txt」は生成されないし、
サーバー側に送って実行しても
記録ファイルの入出力にエラーが発生しました.
となってしまいます。
パーミッションも問題ないです。
909デフォルトの名無しさん:2005/09/12(月) 21:47:06
>>902
まあ、一つだけヒントをやろう。
4行目で、既に間違ってるぞ。
910デフォルトの名無しさん:2005/09/12(月) 21:47:21
>>908
つうかメモ帳にコピってperl走らせてやりたいが、00xx:と行書いてあるの取り除くのかったりいよ。
911デフォルトの名無しさん:2005/09/12(月) 21:49:26
912デフォルトの名無しさん:2005/09/12(月) 21:49:40
>910
つ [colrm 1 6]
プログラマなら、これくらいのツールは用意しとけよ。
913デフォルトの名無しさん:2005/09/12(月) 21:52:23
908
print "Content-type: text/plain\n\n正常動作";
__DATA__
3行目の前にこの2行を書いてみるとエラーも出ずに正常動作するよ
注意点は 行頭に空白を入れないこと。
914デフォルトの名無しさん:2005/09/12(月) 21:52:35
>>912
自分がPerl使う時はTeraPadあたりでやるから必要ないのよ。
要するに書けたり置換出来たりすればいいんであって、colrmとかを使う必要を感じない。
企業とかでチーム組んで書いてるとかじゃなくて個人で書いてるだけだし。
ましてや他人のソース見るために入れるのはめんどい
915デフォルトの名無しさん:2005/09/12(月) 22:10:25
accesslog.txtを作ったら正常動作しました。
ご迷惑をおかけしたみなさん、及びレスをくれた方々に本当に感謝します。
916デフォルトの名無しさん:2005/09/12(月) 22:11:12
sed標準装備じゃなきゃやってらんない
917デフォルトの名無しさん:2005/09/12(月) 22:13:35
つうかそれこそ Perl で書けよ。
数十秒でかけるでしょ。
918デフォルトの名無しさん:2005/09/12(月) 22:13:57
>>917
おまえまじあたまいいな
919デフォルトの名無しさん:2005/09/12(月) 22:14:01
>>902
> ではこの板は何のために存在するんですか?
http://pc8.2ch.net/tech/
> この板はプログラムを作る人のための板です。
この板の全てのスレが質問スレだなどと勘違いしないでくれよ。
このスレは確かに質問スレだが、お前のしていることは質問じゃない。少なくともそう見えない。
もう少し質問の仕方を勉強するべきだと思うよ。
長文失礼

>>914 おまいは本当にPerl使いかと(ry
$ perl -pe "s/^\d+:\s?//"
920デフォルトの名無しさん:2005/09/12(月) 22:37:06
>>900
> 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
でいけるはず。
921デフォルトの名無しさん:2005/09/12(月) 22:59:34
>>899 >>902 >>915
>>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__
922デフォルトの名無しさん:2005/09/13(火) 00:04:53
>>921 ステキ!!!



>>902
>指摘されて習得することも多いと思います。

だからみんな親切に指摘してあげてるじゃない。
質問の仕方が間違ってるって。

923デフォルトの名無しさん:2005/09/13(火) 01:17:01
http://www.imgup.org/file/iup83766.gif
↓インスパイヤ
http://viploader.net/src/viploader3656.jpg
http://www.imgup.org/file/iup83862.jpg

avexのロゴにインスパイアされて
新たなオリジナリティーを加えてロゴ化したものですが、
avexのロゴマークを使用されることを何ら制限するものではございません。
何卒ご理解のほどよろしくお願いいたします。
924デフォルトの名無しさん:2005/09/13(火) 01:18:43
みなさんテキストエディタは何を使っていますか?
メモ帖から乗り換えようと思っているのですが
Perlのキーワードを着色してくれたり色々あって迷っています
925デフォルトの名無しさん:2005/09/13(火) 01:27:59
「メモ帳から乗り換え」wwwww
926デフォルトの名無しさん:2005/09/13(火) 01:40:23
QX 最強
927デフォルトの名無しさん:2005/09/13(火) 01:47:25
>>924
>>479
同様の質問に答えた覚えがあったから過去ログさかのぼってみたらPart16でも出てるな。参照不能だけど

>>925
何か学校でいやな事でもあったのか?
928デフォルトの名無しさん:2005/09/13(火) 02:28:01
>>924
emacs
929デフォルトの名無しさん:2005/09/13(火) 03:26:28
なにこのスレの伸びは
930デフォルトの名無しさん:2005/09/13(火) 03:56:38
>>924
vi
931デフォルトの名無しさん:2005/09/13(火) 03:57:56
結局、主だったエディタがひととおり出て、それで終わると……
932デフォルトの名無しさん:2005/09/13(火) 04:45:49
>>924
ワードパッド
933デフォルトの名無しさん:2005/09/13(火) 04:48:19
perl ぐらいなら、プログラミング向けエディタならみんなサポートしているだろうからな。
934デフォルトの名無しさん:2005/09/13(火) 06:29:49
935デフォルトの名無しさん:2005/09/13(火) 11:51:29
>>921
オレは、キミのプログラムも、相当にキモイと感じるのだが。


($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);
936デフォルトの名無しさん:2005/09/13(火) 12:48:54
結局、普通のコーディングでも顔文字は必要なんだなw
937デフォルトの名無しさん:2005/09/13(火) 13:17:35
(^_^)
938ヽ(´ー`)ノ ◆.ogCuANUcE :2005/09/13(火) 15:08:08
日付のフォーマットには、POSIX::strftime を使うと良いと思う。
939デフォルトの名無しさん:2005/09/13(火) 15:26:04
>>935
>>921 は明らかにワザとだと思うが…
940デフォルトの名無しさん:2005/09/13(火) 16:30:33
ハッシュのキーやデータ部、配列の要素等に、
文字列を指定する際、シングルクオテーションで
挟むのが良いのでしょうか?ダブルクオテーション
で挟むのが良いのでしょうか?
941デフォルトの名無しさん:2005/09/13(火) 16:35:51
>>940
完全に好みの問題だと思うが、漏れは必要なければダブルクォーテーションは使わんな。
エスケープ文字の検査の処理が余計に掛かりそうな気がして・・・実際のところはどうか知らないけれど
942デフォルトの名無しさん:2005/09/13(火) 16:47:36
>>940
おれも必要なければシングルクォーテーションを使ってる。
文字列中の変数展開検査に関しては941と同じ理由なのと、
明示的に変数展開をしないことを示すため。

まぁ、どちらを使うかは趣味の問題だと思うよ。
943デフォルトの名無しさん:2005/09/13(火) 17:28:47
>>940
クォート打つのめんどいから囲んでない。
必要なトコはダブルで。
ちなみにシングルでも検査はされるし、
展開が無けりゃ速度は変わらん。
944941:2005/09/13(火) 17:45:56
>>943
> ちなみにシングルでも検査はされるし、
'ho\'ge'こういうのありだったんだ。知らなかった
あと、ハッシュのキーに関しては漏れも囲まないな。
打つのが面倒なのもあるが、何より自分の主観的にそっちのほうが格好良いと思ってるから。
945デフォルトの名無しさん:2005/09/13(火) 23:05:52
>>943
後半2行にショック…
946デフォルトの名無しさん:2005/09/14(水) 22:02:07
>>940
クォートは打つのがめんどくさいから => とか qw()とか使いまくり。
947デフォルトの名無しさん:2005/09/14(水) 22:53:56
>>946
qw だと無駄な処理発生しないん?
948デフォルトの名無しさん:2005/09/15(木) 00:11:22
>>947
5.005 ぐらいまでは
my @array = qw(foo bar baz);
というコードはコンパイル時に
my(@array) = split(/\s+/, 'foo bar baz', 0);
というコードへ変換されていたが、今は
my(@array) = ('foo', 'bar', 'baz');
へ最適化されるので気にしなくていい。
949デフォルトの名無しさん:2005/09/15(木) 02:04:41
>>948
マジっすか。 Perlのコード最適化スレないんかの
950デフォルトの名無しさん:2005/09/15(木) 06:57:02
>>949
% perl -MO=Deparse ファイル名
して確認
951デフォルトの名無しさん:2005/09/15(木) 08:13:40
forkで子プロセス作りまくったら数十個で作れなくなるんだけどどうにかならないの?
メモリは普通にあいてる。
winXPです
952デフォルトの名無しさん:2005/09/15(木) 08:57:29
>>948
全然関係ないけどちょっと気になったのですが、
my @arrayとmy(@array)の括弧の有り無しの違いは何ですか?
953デフォルトの名無しさん:2005/09/15(木) 09:42:51
ない
954デフォルトの名無しさん:2005/09/15(木) 14:17:46
>>952
>>950
なぜ、自分で調べよう、試そうとしないんだろう。
955デフォルトの名無しさん:2005/09/15(木) 14:43:49
>>954
> なぜ、自分で調べよう、試そうとしないんだろう。
まあまあ。
どうせリアルで友達いないんだろうから、せめてネットの中で
他人とのコミュニケーションを求めようとしてるんだろ。
桶愚とおんなじだ。生暖かく見守ってやれ(w
956デフォルトの名無しさん:2005/09/15(木) 15:23:30
どっちかっつーと、>>950=952は「無属性の馬鹿」で、友達の有無までは見えてこない。
むしろ>>955みたいなネチっこい奴のほうが「リアルで友達いない」タイプに見えるなぁ。

自分にとって「友達の有無」が痛点だから、煽りにも真っ先に混ざっちゃいました、って感じ。
957デフォルトの名無しさん:2005/09/15(木) 16:17:11
なんかあるとすぐ リアルで~ って・・・ すげーアレだなw
958デフォルトの名無しさん:2005/09/15(木) 17:00:06
おまいらスレタイ嫁
959デフォルトの名無しさん:2005/09/15(木) 17:06:17
>>955
自分に友達がいないことをばらしている馬鹿
960デフォルトの名無しさん:2005/09/15(木) 17:25:28
紅玉とニシキヘビだけが友達さ
961デフォルトの名無しさん:2005/09/15(木) 18:40:15
つーか煽りあいはやめとけ。
962デフォルトの名無しさん:2005/09/15(木) 18:47:24
は?
963949:2005/09/15(木) 19:02:13
>>950
あ、展開されてるかどうかの意味ではなくて、
こういう perl向けの最適なコーディングの事。

例えば、
my @week = qw(日 月 火 水 木 金 土);
を、パッケージの頭で宣言しておくか、
関数内で宣言するかで、ひょっとして関数呼ばれる度に
代入されてんのか?実はコンパイラが同等へ最適化してる?
みたいな実行効率の疑問が出てくる。

そんなの、まとまってないかなぁとか思って。
(スレじゃなくても サイトでもいいか)
964デフォルトの名無しさん:2005/09/15(木) 19:05:01
自分で調べる方法を教えて欲しいんだが、ベンチぐらいしか思いつかない。
ソース読んだりしてるのかなぁ・・・・。
965デフォルトの名無しさん:2005/09/15(木) 19:12:49
>>964
> 自分で調べる方法を教えて欲しいんだが、ベンチぐらいしか思いつかない。

何を自分で調べる方法?
966デフォルトの名無しさん:2005/09/15(木) 20:39:35
普通に調べようがないよね。うん



967デフォルトの名無しさん:2005/09/15(木) 20:55:18
>>963
実行時にリストに変換される。
実行効率は同じ@perl, v5.8.4 built for i386-linux-thread-multi
968デフォルトの名無しさん:2005/09/15(木) 21:02:10
951だけど誰か教えてよ(^^)
969デフォルトの名無しさん:2005/09/15(木) 21:41:27
>>968
問題が再現する小さいサンプルを載せろ
970デフォルトの名無しさん:2005/09/15(木) 22:11:47
for($i=0;$i<1000;$i++) {
if($p=fork) {
next;
} elsif(defined($p)) {
sleep 10000;
exit;
} else {
print("$i\n");
<STDIN>;
}
}

WindowsなのでUnix系OSと少し違うと思いますが
971デフォルトの名無しさん:2005/09/15(木) 22:26:49
わからず悩んでます。

perlで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'とすれば問題なく取得できました。
どうすればダブルクォーテーションからシングルダブルクォーテーションに
なるのでしょうか?

どなたかよろしくお願いします。
972デフォルトの名無しさん:2005/09/15(木) 22:28:05
SQL文がまちがってました。

SQL文は"select * from TBL whrere AAA = :sid and BBB = :hid;"
です。
973デフォルトの名無しさん:2005/09/15(木) 22:53:12
どっちみちwhereがwhrereになってるので意味無いね
974デフォルトの名無しさん:2005/09/15(木) 22:57:43
質問するときは
>エラー内容は型があってないとのことです
とか書かないで出力されたエラーメッセージをありのままに
書けって習わなかった?
975デフォルトの名無しさん:2005/09/15(木) 23:40:37
重ね重ねすいません。
SQL文は"select * from TBL where AAA = :sid and BBB = :hid;"
です。
出力されたエラーは
DBD::Oracle::st execute failed: ORA-12704:
(DBD ERROR: error possibly near <*> indicator
です。
これでわかることがありましたら教えてください。
976デフォルトの名無しさん:2005/09/16(金) 22:21:22
>>975
丸一日レスないし。
DB板へ行って訊いたら?
977デフォルトの名無しさん:2005/09/16(金) 23:50:00
>>975
"select * from TBL where BBB = :hid and AAA = :sid;"
ってBBBを前に書くとどうなる?
978デフォルトの名無しさん:2005/09/17(土) 10:56:22
951,970だけど誰か答えてよ(^^)
979デフォルトの名無しさん:2005/09/17(土) 11:20:07
いいからperldoc読めよ。
ここに何か書いてない?
ttp://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfork.pod
980デフォルトの名無しさん:2005/09/17(土) 11:40:48
Copyright 1987-2005, Larry Wall
Larry Wallって18年もperl書き続けてるのか
981デフォルトの名無しさん:2005/09/17(土) 12:39:41 BE:1089825-###
クスクス(^ω^)
982デフォルトの名無しさん:2005/09/17(土) 14:09:06
>>970
次スレよろ。
983デフォルトの名無しさん:2005/09/17(土) 14:30:58
18年もの歳月があってあの程度じゃ
Larry Wallってのもたいしたことないよね
984デフォルトの名無しさん:2005/09/17(土) 18:04:24
>>951 >>978

> forkで子プロセス作りまくったら数十個で作れなくなるんだけどどうにかならないの?
> メモリは普通にあいてる。
デスクトップヒープ領域が足りなくなった可能性がある。

http://support.microsoft.com/default.aspx?scid=kb;ja;JP126962
「デスクトップ アプリケーションのヒープを増やす」

ここにある方法で増やせるようだが、OSの記述がWindows2000までなので、
XPにも使えるのかどうかは解らん。
子プロセスではなく、スレッドが使えるのならスレッドを使ったほうが
いいかもしれない。(実はオレもスレッドのことはよく解らんし使った
こともないが)
985デフォルトの名無しさん:2005/09/17(土) 18:14:57
>>971
use DBD::Oracle qw(:ora_types);
なり
use DBI qw(:sql_types);
なりして
bind_paramにアトリビュート設定してみたら?
986デフォルトの名無しさん:2005/09/17(土) 23:11:00
教えていただきたいのですが、Aサーバにあるperlプログラムが
Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
987デフォルトの名無しさん:2005/09/17(土) 23:11:39
教えていただきたいのですが、Aサーバにあるperlプログラムが
Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
988デフォルトの名無しさん:2005/09/17(土) 23:12:35
すいません、2回書き込んでしまいました。
989デフォルトの名無しさん:2005/09/17(土) 23:19:13
教えていただきたいのですが、Aサーバにあるperlプログラムが
Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
990デフォルトの名無しさん:2005/09/17(土) 23:24:44
986ですが、989の3回目の書き込みは自分じゃないです…
991デフォルトの名無しさん:2005/09/17(土) 23:53:20
次スレよろ
992デフォルトの名無しさん:2005/09/18(日) 01:18:59
教えていただきたいのですが、Aサーバにあるperlプログラムが
Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
993デフォルトの名無しさん:2005/09/18(日) 01:20:07
教えていただきたいのですが、Aサーバにあるperlプログラムが
Bサーバにあるテキストファイルを読み込ませるにはどうすればよいのでしょうか?
994デフォルトの名無しさん:2005/09/18(日) 01:52:38
>>986
教えてあげるから次スレ立ててくだされ。

HTTP なり FTP なり ssh なり メール なり他の通信路なりで
やりとりすればOK。
995デフォルトの名無しさん:2005/09/18(日) 02:31:25
新スレ建てたよ。
http://pc8.2ch.net/test/read.cgi/tech/1126977805/l50

独断でテンプレを多少弄った。
996デフォルトの名無しさん:2005/09/18(日) 03:04:04
んじゃ誰か埋めといて。
997デフォルトの名無しさん:2005/09/18(日) 03:05:44
んじゃ、埋め
998デフォルトの名無しさん:2005/09/18(日) 03:06:51
998
999デフォルトの名無しさん:2005/09/18(日) 03:07:36
1000デフォルトの名無しさん:2005/09/18(日) 03:08:13
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。