トップページ⇒tech
1001コメント334KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/07/20(水) 05:15:36
"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
0002デフォルトの名無しさん2005/07/20(水) 05:23:09
● 過去ログ

1 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
0003デフォルトの名無しさん2005/07/20(水) 05:24:24
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
0004デフォルトの名無しさん2005/07/20(水) 05:30: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
0005デフォルトの名無しさん2005/07/20(水) 05:35:48
[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0006デフォルトの名無しさん2005/07/20(水) 07:14:07
>>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/
0007デフォルトの名無しさん2005/07/20(水) 19:40:03
ASP.Net、PHP、Ruby、Pythonの連合軍にやられて死滅寸前のPerl公国
0008デフォルトの名無しさん2005/07/20(水) 23:51:45
perl5はもはやsedやawkと同じぐらいUNI*Xの底辺まで沈みつつある。
あと10年もすれば流行りの言語を尻目に枯れ果てて/binにまで落ち、
ニッポンの勘定系のバッチでも使えるようになっているだろうさ。

0009デフォルトの名無しさん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;

はだめです。シングルクオーテーションや.を+にしたりしましたがだめでした。
0010デフォルトの名無しさん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万倍になるのでしょうか?
0011デフォルトの名無しさん2005/07/21(木) 00:42:38
>>9
(1)
unpack/pack または ord/chr

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

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

でファイルからランダムに1行選択できる、とありましたが
10行選択したい場合はどのように記述すればよいのでしょうか。
0016デフォルトの名無しさん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;
0017デフォルトの名無しさん2005/07/21(木) 12:42:37
たぶん考え方はそれでいいんじゃないかと。
行の前後関係を保とうとするとさらに一工夫
必要かな。
0018デフォルトの名無しさん2005/07/21(木) 14:52:24
行の前後関係も保つとなると、

@array = ();
$max = 10;
$n = 0;

srand;
open(FILE, "< $file");
rand($.) < 1 and $array[($n <= $max) ? $n++ : int(rand $max)] = [$_, $.] while <FILE>;
close(FILE);
@array = map { $_->[0] } sort { $a->[1] <=> $b->[1] } @array;
print @array;

て感じかな(未確認)。
0019デフォルトの名無しさん2005/07/21(木) 14:52:54
すまん
$n < $max
だな。
0020デフォルトの名無しさん2005/07/21(木) 15:07:46
数十から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の問題なのか切り分け
ようと思うのですが、どこから手を付けたらよいのでしょうか。


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

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

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

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

BEGIN{
require 'constants.pl';
}
0031デフォルトの名無しさん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";
0032152005/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;

こんな風に考えていました。バラバラに代入していく方法でも確率は均等になるのでしょうか。
0033152005/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;
0034デフォルトの名無しさん2005/07/21(木) 22:43:21
>>31
俺もExporter使えと誰かが答えていたのを見たような覚えがある。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

すいません質問です。
use strictとかuse warningsを使う場合、
モジュールの呼び出し元のファイルで一回記述しておけば
モジュール側では記述しなくても良いのでしょうか?
それともファイル毎に記述すべきですか?
0064デフォルトの名無しさん2005/07/23(土) 19:14:47
>>63
strict/warningsの有効範囲はプログラム全体でもファイル全体でもなく「ブロック」。
そのくらい試せよ。
0065622005/07/23(土) 20:06:26
>>64
ありがとうございます。
プログラム全体で有効にさせたい場合は全てのファイルで
先頭にでも記述しとけばいいということですね。
0066デフォルトの名無しさん2005/07/24(日) 00:09:00
warningsはperl -wで全体で有効に出来る
0067デフォルトの名無しさん2005/07/24(日) 01:33:07
>>60
>>61
有り難うございます。両方出来ました。
0068デフォルトの名無しさん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した場合も、ちゃんとメッセージが返ってきます。
0069デフォルトの名無しさん2005/07/24(日) 02:24:23
>>68
ヒント。
・httpd.confの設定
・+ExecCGI
・ScriptAlias
あとはWebProg板のほうが適切と思われ。
0070デフォルトの名無しさん2005/07/24(日) 02:24:49
>>68
それはおそらく、Perlの問題ではなくApatchの設定の問題だと思われます。
また、>>1をご覧になるとわかる通りCGIに関する質問は板違いになるので
Webプログラム板でされた方が回答が得易いかと思われます。
0071682005/07/24(日) 09:53:48
>・httpd.confの設定

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

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

0082デフォルトの名無しさん2005/07/24(日) 20:50:52
さてコードを貼り付けようとコードを整理したらちょっと
気づいたことがあったので、ぷろPでちょろっと調べたら
事故解決しますたw
0083デフォルトの名無しさん2005/07/24(日) 22:09:42
m9(^Д^) プギャー
二度とくるな
0084デフォルトの名無しさん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の中身書きますが、
とりあえずどういう不具合が考えられるでしょうか?
0085842005/07/25(月) 12:59:21
あー分かりました。シェル上のワイルドカードってやつですね。
大変失礼しました。
0086デフォルトの名無しさん2005/07/25(月) 14:45:23
関数を変数として扱うにはどうしたらよいですか?
0087デフォルトの名無しさん2005/07/25(月) 14:50:07
夏だなあ
0088デフォルトの名無しさん2005/07/25(月) 15:01:42
>>86
無名サブルーチンへのリファレンスとか?
0089デフォルトの名無しさん2005/07/25(月) 15:30:29
>>86
・現在のコード
・その「関数を変数として扱った」場合の呼び出しコード(希望でよいので)
・どうしてそのように扱いたいのか

を列挙してみましょう。
これらを整理すると、整理中に自己解決したり、検索すべきキーワードが
浮かんだりしますよ。
0090デフォルトの名無しさん2005/07/25(月) 17:23:15
>>87
こういう人を見るとホント夏を実感するねえ。
バカだなー、まあ子供だからしょうがないかって。
0091デフォルトの名無しさん2005/07/25(月) 19:26:33
最後が文章変。
0092デフォルトの名無しさん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)
0093デフォルトの名無しさん2005/07/26(火) 23:02:49
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0094デフォルトの名無しさん2005/07/26(火) 23:06:15
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0095デフォルトの名無しさん2005/07/26(火) 23:08:12
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0096デフォルトの名無しさん2005/07/26(火) 23:10:18
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0097デフォルトの名無しさん2005/07/26(火) 23:11:53
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0098デフォルトの名無しさん2005/07/26(火) 23:14:12
キテガイ来た
0099デフォルトの名無しさん2005/07/26(火) 23:17:05
Perlコーディング初心者質問スレ Part 42
にて質問したのですが回答を得られなかったためこちらでも質問させて下さいm(_ _)m
----
ajaxを用いてある程度インタラクティブなweb telnetみたいな物を作りたいのですが
持続的なコネクションを確保する場合方向性としては、どっかのPORTにlistenする
デーモン的なプログラムとユーザーからのアクションやセッションを司るプログラムを
組み合わせるような方法がベターなのでしょうか。
mod_perlもいいかなと思ったのですが必ず前回アクセスしたプロセスにアクセス出来るとは
限らないので無理そうです。
listenしなくても常駐させてpidを記録しておき、別プログラムからpidの情報を元に操れたり
する事は出来ますか?
0100デフォルトの名無しさん2005/07/26(火) 23:23:20
>>93-96
連投いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
0101デフォルトの名無しさん2005/07/26(火) 23:28:56
>>93-97,99
連投いい加減にせいよ(゚Д゚)ゴルァ!!
原因と再発防止策をここに書け。
■ このスレッドは過去ログ倉庫に格納されています