トップページ⇒php
1001コメント375KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん04/11/27 11:35:03ID:DJwiGeFM
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0809nobodyさん05/01/17 17:21:37ID:???
>>808
sudoつかえば? 注意して設定しないと穴になるけど。


0810nobodyさん05/01/17 17:38:11ID:???
>>807
意味不明
0811nobodyさん05/01/17 21:05:30ID:fcKelFvp
配列の中に特定の要素が一つでもあればOKと言うような
コードを書くのにforを使って書けば済むのですがgrep等を使ってもっと
簡潔に書きたいと思っています。
しかしgrepは恐らく配列全部参照するので配列数が多くなるにつれて
処理が遅くなってしまうのではないかと思い、以下のようなものを書いてみました。

@test = (1..999999);
$Atime = time;
for($i=0;$i < @test;$i++){
if($test[$i] eq "1"){
print"ひっと\n";
last;
}
}
$rest = time - $Atime;
print"time:$rest\n";
$Atime = time;
print"ひっと\n" if grep ("1" eq $_,@test);
$rest = time - $Atime;
print"time:$rest\n";
sleep(9999);

やはり、forに比べてlastしない分grepのほうが遅くなりました。
grepのように簡潔にかけてforと同じもしくはそれ以上の速度が出せるような
コーディングの仕方はないものでしょうか・・
アドバイスお願いします。
0812nobodyさん05/01/17 21:39:56ID:???
>>811
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
081381105/01/17 22:07:21ID:???
>>812
大変貴重なページを教えていただきありがとうございます。
How can I tell whether an list or array contains a certain element?
あたりに載ってますね。それ以外にも勉強すべき内容が沢山あって本当に助かりました。
0814nobodyさん05/01/18 01:27:26ID:5YMtxRb8

CIGでアクセスログの取得を考えています。
ログ取得に関する部分は下記の通りです。

if(open(FL,">> $file")){
print LOG "時間\tIP\tHPST\tなど…\n";
close(FL);
chmod 0666,$file;
}

ログの解析や表示に時間がかかるのは問題ないのですが、
保存には負荷がかからないようにと考えています。
追加書込モードなら負荷や破損を押さえられると思うのですが、
20万〜30万行程度の蓄積となると負荷は相当違ってくるものなのでしょうか?
081581405/01/18 01:29:10ID:5YMtxRb8
>>814に関して訂正

ログ取得に関する部分は下記の通りです。

if(open(FL,">> $file")){
print FL "時間\tIP\tHPST\tなど…\n";
close(FL);
chmod 0666,$file;
}
0816nobodyさん05/01/18 01:43:47ID:Oto1zFxV
SSIが使えないので、Perlスクリプトをimgタグで呼び出すように作ったんですが、
IEで見た場合、画像が無い時のxが表示されてしまいます。
これをうまいこと出さないで、imgタグでスクリプトを呼び出す事は出来るでしょうか?
0817nobodyさん05/01/18 01:46:02ID:???
>>816
1*1ドットの透過画像でも表示させましょう。
0818nobodyさん05/01/18 02:46:19ID:sIFYihq9
会員約500人分のデータ(URLやサイトの紹介)をWeb上管理したいですが、
このぐらいの数を管理するのに良い方法ってありますか?
使っているサーバはPHPは使えません。

今まで修正・削除などを
「ファイル開く→全データ取り込む→該当データを検索→処理→処理結果を反映して保存」
この単純な方法でやってきたんですが、もっと良い管理方法がありますか?
0819nobodyさん05/01/18 02:57:58ID:???
>>814-815>>816>>818
スレ違い
0820nobodyさん05/01/18 03:43:06ID:mDYssaxT
フォームメールを改造しています。

print <<END_OF_MESSAGE;
…
$ { PrintMessage() }
…
END_OF_MESSAGE

sub PrintMessage {
#ここにある配列を加工したものを上に出すにはどうしたらいいでしょう?
}
0821nobodyさん05/01/18 03:52:41ID:???
>>820
その関数PrintMessageではデータの加工ぐらいしか行わない方が良い。
${}を使ってヒアドキュメント内で出力させるようにするにはprintを使わないと行けない上に、
出力した物は${}があるところではなくヒアドキュメント内の一番最初に出力される。
だから、一回ヒアドキュメントやめるか、配列とか変数に入れといてヒアドキュメント内で出力した方が吉。
0822nobodyさん05/01/18 04:05:21ID:???
>>819
どうした?構って欲しいのか?
0823nobodyさん05/01/18 04:22:12ID:mDYssaxT
>>821
> 出力した物は${}があるところではなくヒアドキュメント内の一番最初に出力される。

げげっ、それは知りませんでした。書き直します。
ありがとうございました。
0824nobodyさん05/01/18 08:32:39ID:???
>>821
副作用じゃなくて文字列返す関数にして、スカラー式を
文字列リテラルに埋め込む慣用句の${\(式)}使えばいい。

print <<END_OF_MESSAGE;
…
$ { \PrintMessage() }
…
END_OF_MESSAGE

sub PrintMessage {
my $s = "適当な文字列";
return \$s;
}
0825nobodyさん05/01/18 10:17:22ID:aExMxO8W
my $a = "aeo,huor,tuuu,gfd";
my $b = "aio,r,3s2r,waaaas,tuuu,huor";

$bの中から$aにないものを削除したいんですが、どうすればいいでしょうか?
$aにあるものを削除するのはわかるので、$aにあるものを$bから新しく$cに移す
という方法は思いついたのですが、なんかいけてないんですよねorz

もっとかっこいいやりかたできませんか?
人間の脳みたいに、違うものという判断をしたら該当部を削除するといった処理を。
0826nobodyさん05/01/18 12:15:23ID:???
>>825
こんなんでどうでしょう?
#--------------------------------------------
my $a = "aeo,huor,tuuu,gfd";
my $b = "aio,r,3s2r,waaaas,tuuu,huor";
$a = ',' . $a . ',';
$b =
join ('',
map { (index ($a, ',' . $_ . ',') < 0) ? '' : $_ . ',' }
split (/,/, $b) );
chop $b;
#--------------------------------------------
082782605/01/18 12:17:02ID:???
↑ map と split の前に タブスペース お願いします。(見やすく)


私も質問なんですが、
ライブラリとかモジュールは、 @INC の中から勝手にファイル検索して読み込んでくれるんですが、
「そのライブラリの中の階層にあるテキストファイル」
を同じように*簡単に*読み込む方法ってありますでしょうか?

例えば、
--------------------------------------------
lib/
 |- Hoge.pm
 |- Hoge/
   |- Hoge1.txt
   |- Hoge2.txt
honya.cgi
--------------------------------------------
があるとして、
--------------------------------------------
# honya.cgi
unshift (@INC, qw(lib ../lib) );
--------------------------------------------
--------------------------------------------
# Hoge.pm
my $dir = ''; # ←ここに勝手にファイルのあるフォルダを検索していれたい
open (TXT, $dir.'/Hoge1.txt');
--------------------------------------------
foreach (@INC) 〜 でやればなんとかできるんですが、
もっと上手い方法でできるなら教えてください。
調べてもわからなかったのです。
そういうことを書いてあるページとかあったらそれでもいいですので。
0828nobodyさん05/01/18 12:22:27ID:???
>>820
sub PrintMessage{
my $message;
# ...
return \$message;
}
print <<EOT;
${ PrintMessage() }
EOT

>>821
ごく一般的なイディオムだと思うが?

>>824
知識が半端過ぎますから!残念!
0829nobodyさん05/01/18 12:33:26ID:???
>>828
関数の戻り値は文字列にして${}の中でリファレンスとる方が
オレは好きだな。

sub PrintMessage{
my $message;
# ...
return $message;
}
print <<EOT;
${ \PrintMessage() }
EOT

083082005/01/18 13:25:04ID:fG6Vu+xI
その後、下のようにしたのですが、配列(文字列配列)の2番目以降の先頭にスペースが
入ってしまいます。

print <<END_OF_MESSAGE;
…
@hairetu
…
END_OF_MESSAGE

配列の中身を出すには、↑のようなやり方はまずいんでしょうか?
0831nobodyさん05/01/18 13:38:49ID:???
>>830
配列を文字列リテラルに埋め込むときは要素間に特殊変数$"($LIST_SEPARATOR)の値が
埋め込まれる(デフォルトは空白)。

これが嫌ならば$"を空文字列にしておくか、配列をつなげた文字列を作って別の変数
にいれてそれを埋め込むか、式を埋め込む慣用句で${\join('', @hairetu)}などと
する。


083282005/01/18 13:43:04ID:fG6Vu+xI
>>831
おお、ありがとうございます!

> ${\join('', @hairetu)}

↑これでうまくいきました。(ぺこり
0833nobodyさん05/01/18 14:21:05ID:???
PerlにCのatoi()に相当する関数はあるの?
0834nobodyさん05/01/18 14:38:53ID:???
>>833
二通りの答えが考えられるが、質問の詳細が分からないので両方書いておく。

1.ある
2.ない

0835nobodyさん05/01/18 15:03:27ID:???
perlは文字列の先頭が数のように見える文字列は数として
使うと自動的に数に変換するので、明示的にatoiのような
ことをする必要はない。

しかし、atoiとは違って小数点を含んだ文字列は適当小数
に変換してしまうので、厳密にatoiと同じ仕様が欲しければ
CPANモジュールのatoiのようなものを使うか自前で似たような
ことをしなければならない。
0836nobodyさん05/01/18 15:10:10ID:???
eval()使えばいい。
0837nobodyさん05/01/18 16:19:26ID:???
>>835
すまん、POSIXのatoiはC-specificなので存在しなかった。
整数部が欲しければintを使えということになっている。

もちろんperlのintだとCのint型があふれるような大きな
数でもそれなりに変換できてしまうので、全く同じでは
ない。

例えば手元のC処理系ではatoi("9999999999999")は
2147483647になるが、perlでint("9999999999999")
はそのまま9999999999999だった。

その辺まで同じにしようと思うとXSでatoi呼ぶモジュール
作る方が楽かもな。
0838nobodyさん05/01/18 16:52:34ID:SYAXE7mK
phpで、あるファイルのmime typeが「jpgまたはjpeg」であるか否かを判定するには、
どうかけばいいんでしたっけ???
0839nobodyさん05/01/18 17:41:58ID:???
>>838
PHPスレで聞いてください。
0840nobodyさん05/01/18 23:32:22ID:???
ベンチマークをしたいので、
use benchmark;
と書きましたが、syntaxエラーになりました。
どうすればよいですか?

#! パス
use benchmark;
print 'テスト';
0841nobodyさん05/01/18 23:41:37ID:???
#! パス
use Benchmark;
print 'テスト';
0842nobodyさん05/01/18 23:44:44ID:???
>>840
ヘッダはどうした?
0843nobodyさん05/01/18 23:46:14ID:???
ダブルヘッダー
0844nobodyさん05/01/19 00:08:55ID:???
>>842
( ´,_ゝ`)プッ
0845nobodyさん05/01/19 00:29:44ID:???
>>
DOS窓でテストしていますので、今はコメントアウトしています。
0846nobodyさん05/01/19 03:18:49ID:???
>>845
benchmark; をコメントアウトすればわかるだろ。
0847nobodyさん05/01/19 12:21:25ID:???
RDMをフラットファイルで取り扱いたいのですが、サーバにDBD::CSVが入っていません。
何か良い選択肢は無いでしょうか?
0848nobodyさん05/01/19 12:58:46ID:???
お爺さんは山へ芝刈りに、お婆さんは川へ選択に…
0849nobodyさん05/01/19 17:43:55ID:ay48KDLy
PerlMagickの質問です。
下のソースでJPEGのサムネイルを作ってるんだけど

$simg = Image::Magick->new;
$simg->Read($inimage);
$simg = $simg->Transform(geometry=>$width_size);
$simg->Write($putsam_jpg);

アニメーションGIFを$inimageにした場合
うまくJPEGに変換できず
***.jpg.0
***.jpg.1
***.jpg.2
のようなファイルが出来てしまいます。
1フレーム分だけの情報を使って
JPEG画像にするにはどうしたらよいのでしょうか?
0850nobodyさん05/01/19 19:06:38ID:???
>>849
$simg->[...]で1枚だけ適当に取り出せばいいんじゃないかな。

$simg = Image::Magick->new;
$simg->Read($inimage);
$simg = $simg->[0]->Transform(geometry=>$width_size);
$simg->Write($putsam_jpg);

とか。
0851nobodyさん05/01/19 20:17:15ID:ms2pliGv
プロセス間通信で共有メモリを使ってメモリ節約したいと思い
IPC-SharedCacheと言うモジュールを見つけたのですが
windows環境では使えないみたいです。

windows環境で共有メモリを使えるようにする方法はないものでしょうか?
OSは2000SP4です。
助言いただければ幸いです。

#必死こいてドキュメント英訳したのに・・最初にactivestate行って使えるか確認しとくんだった。
0852nobodyさん05/01/19 23:06:54ID:yPuKv0T8
CGI始めて1ヶ月たらずのド素人です。どなたか教えて下さい。

htmlのページから
< a href="abc.cgi">A氏</a>
< a href="abc.cgi">B氏</a>
というようなリンクでabc.cgiを呼び出した時、abc.cgi側で、
A氏、B氏のどちらのリンクで呼び出されたかを判断するに
は、どうすれば良いでしょうか?A氏で呼ばれた場合と、B氏
で呼ばれた場合で処理を変えたいのですが。。なにか関数とか
あるのでしょうか?

なにか的外れなことを言ってたらすいません。m(_ _)m
0853nobodyさん05/01/19 23:11:38ID:???
<a href="./abc.cgi?auther=A">A氏</a>
<a href="./abc.cgi?auther=B">B氏</a>
とか、
続きどぞー
↓
0854nobodyさん05/01/19 23:36:11ID:???
<a href="./abc.cgi?orewa=A">A氏</a>
<a href="./abc.cgi?orewa=B">B氏</a>
とか、
続きどぞー
↓
0855nobodyさん05/01/20 00:21:57ID:yz6Kh3Ct
ore dattara auther dehanaku author to kakuna-.
0856nobodyさん05/01/20 00:41:51ID:???
>>851
Win32::MemMap というモジュールなら共有メモリを使えるとの噂は聞いているのだが、
入手方法すらわからん状態なので、俺の代わりに見つけてきてくれ
0857nobodyさん05/01/20 01:00:19ID:xH8/53fr
>853
>854
>855
852ですが、せっかく回答頂いたのですが、なにせ素人でいまいち
分かりません。。
"?"の後は変数名でしょうか?html側で変数に値をセットしておけば、
abc.cgi側で参照できるのですか?(全然違う??)
できれば、cgi側の記述はどうなるか教えて下さい。m(_ _)m
0858nobodyさん05/01/20 01:19:09ID:???
>>857
本とか見ながらやってるんじゃないのか?
とりあえず簡単に書いてあるところをひとつ。
http://perl.misty.ne.jp/13.html
0859nobodyさん05/01/20 04:36:12ID:???
>>827
なにをどう簡単にしたいのか解らんが、サブルーチンにするんじゃだめなのか?
後、foreachを使わない短い書き方を質問したのであれば1行版を使ってくれ。

#========== サブルーチン版 ============
my $full_path = search_inc('Hoge1.txt');

sub search_inc{
my $file = shift;
foreach my $path(@INC){
my $full_path = "$path/$file";
if(-f $full_path){
# ファイル名がいらなければ
# return $path;
return $full_path;
}
}
}

#========== 1行版 ============
my $full_path = (grep{-f}map{"$_/Hoge1.txt"}@INC)[0];

# ファイル名がいらなければ
my $dir = (grep{-f"$_/Hoge1.txt"}@INC)[0];
0860nobodyさん05/01/20 04:43:46ID:???
>>859
「簡単」でなく「上手い方法」だったな
086184905/01/20 14:03:27ID:???
>>850
1フレームだけの抽出が出来ました。ありがとうございます。
086285105/01/20 14:57:39ID:???
>>856
CPANを検索してWin32-MMFというモジュールを見つけてきました。
http://search.cpan.org/~roger/Win32-MMF-0.09e/MMF.pm
多分同じような目的で使えるのではないかと・・・
activestateにはモジュールが用意されいなかったためppmが使えず
早速
http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2f%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb%28CPAN%29
ここの手引き通りにCPANでWin32-MMFをインストールしようとしたのですが
最後のMAKEの時に失敗してしまうようです。
086385105/01/20 14:58:39ID:???
Microsoft (R) KKCFUNC バージョン 1.10
Copyright (C) Microsoft Corp. 1991,1993. All rights reserved.

KKCFUNC が組み込まれました.

マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993

PKSFX (R) FAST! Self Extract Utility Version 2.04g 02-01-93
Copr. 1989-1993 PKWARE Inc. All Rights Reserved. Shareware version
PKSFX Reg. U.S. Pat. and Tm. Off.

Searching EXE: C:/PERL/ADDED/NMAKE15.EXE
Inflating: NMAKE.ERR
Inflating: NMAKE.EXE
PKSFX: (W18) Warning! README.TXT already exists. Overwrite (y/n)?y
Inflating: README.TXT
C:\Perl\added\nmake15.exe -- NOT OK
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible
このような感じです。DBIやHTTP::Liteなどは問題なくMAKEも完了し
正常にインストールされる為、原因がわかりません。
086485105/01/20 15:07:00ID:???
連書き失礼します。

OSはwin2000sp4とxpSp1で各OSにて
ActivePerl-5.6.1.638-MSWin32-x86.msi
ActivePerl-5.8.4.810-MSWin32-x86.msi
の2つを試してみましたが全部同じ結果が出てしまいます。

他のモジュールについてはインストール可能でしたがwin32-APIだけは
同じような理由でインストールできませんでした。

C:\Perl\lib
C:\Perl\lib\auto
にファイルをぶち込めばインストールできそうかなと思うのですが
C:\Perl\lib\autoに入れるべきデータ、dll等を生成してくれないため試すことができません。
0865nobodyさん05/01/20 18:15:40ID:8gUpqVNO
EUC-JPでURLエンコードされた文字をUTF-8に変換したいとき

Encodeモジュール使ってやると
$str = "%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9%A4%B9%A4%EB%A5%C6%A5%B9%A5%C8";
$str =~ tr/+/ /;
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego;
from_to($str, "euc-jp", "utf8");

とやったんですが
$strの中身が \¨\ó\³¡¼\ɤ¹¤ë\Æ\¹\È こんな感じになってしまいます
別にEncodeモジュールなしでもいいので
教えてplz
086686505/01/20 18:29:47ID:???
いけました
0867nobodyさん05/01/20 20:15:11ID:???
>>863
君もまた豪快なことをするな。
nmake15.exe は自己解凍ファイルなのに、
それを解凍せずそのまま C:\perl\added\ に置いただろう?

まあいずれにしても、もはやコーディングの話題ではないので、話が続くようなら
ttp://pc5.2ch.net/test/read.cgi/php/997829243/ とかに移った方がいいかもしれん。
0868nobodyさん05/01/20 21:58:37ID:2X1THOk4
tieを使ってDBMファイルに書き込んでるんですが、DBM内から任意のハッシュのみを削除するにはどうすればよいのでしょう?

例えば$data{"test"} = "foo";というデータがあって
undef($data{"test"});としても$data{"test"}=undefとなって削除できないです・・・。
086985105/01/20 22:03:45ID:???
>>867
・・・おっしゃる通りでした。てっきコンパイラそれ自体だとばかり思っていました。
そうすると逆に正常にインストールできたモジュールのほうがおかしいことになりますね。
誘導までして頂いてありがとうございます。

因みに
nmake15.exeを解凍し、でてきた
NMAKE.ERR
NMAKE.EXE
README.TXT
を同様にC:\perl\added\に置いて設定しましたがエラーがでてしまいました。

これからは誘導先に移らせて頂きます。
0870nobodyさん05/01/20 22:07:33ID:???
>>868
dup_del('test');
0871nobodyさん05/01/20 22:08:28ID:2X1THOk4
すいません、馬鹿な書き込みしました。868は忘れてください。

DBMファイルに一定の連想配列が保存されている時に、それらのデータを読み込まず
任意の連想配列のみを削除することは出来ますか?
データを空にすることはできるのですが、その連想配列自身を消すことが出来ないんです・・・。
0872nobodyさん05/01/20 22:08:48ID:???
あ、
delete $data{'test'};
ですたm(_ _)m
0873nobodyさん05/01/20 22:32:19ID:2X1THOk4
>>872
ありがとうございます。やってみたんですが、やっぱり消すことが出来ません。
ハッシュの書き込みなんですが以下のようにやってます
%writehash = (%writehash, %$data);
%$dataが追加するデータです。

もとのデータを%$dataに読み込んでdeleteし、
%writehash = %$data;
とすれば実現できたんですが、一度データを読み込まなければいけないので、、、
0874nobodyさん05/01/21 00:08:52ID:???
>>873
手元ではdeleteで消えるけど何が違うんだろうね。

% perl -e 'use DB_File; tie %h, "DB_File", "db"; $h{"foo"} = 1; $h{"baa"} = 2;'
% perl -e 'use DB_File; tie %h, "DB_File", "db"; foreach(keys %h){print $_,"\n"}'
foo
baa
% perl -e 'use DB_File; tie %h, "DB_File", "db"; delete $h{"foo"};'
% perl -e 'use DB_File; tie %h, "DB_File", "db"; foreach(keys %h){print $_,"\n"}'
baa
0875nobodyさん05/01/21 06:07:09ID:???
>>859
ありがとう!(゜∀゜)
やってたこと同じだったけど、1行文が簡潔で参考になりました。
0876nobodyさん05/01/21 12:37:45ID:AnHfdE4Z
while(1){
while(1){
if ($a == 1){ ここで二つの無限ループを抜け出したいんです}
}
}

ifの中になんと書けば2つ一気にでられますか?
activeperl5.6.1が自宅環境でサーバでは5.8.1のようです。
宜しくお願いしますm(_ _)m
0877nobodyさん05/01/21 12:52:16ID:???
NUKERU:
while(1){
while(1){
if($a == 1){ last NUKERU; }
087887605/01/21 13:49:59ID:AnHfdE4Z
>>877
ラベルを使えばいいんですね。
でもラベルってループ文が出てくるより前に書くのですか?
無限ループになりそうで怖くて試せません。

後ろに付けてもぬけれましたが、その後の処理をしてくれませんでした。

while(1){
last A;
print 1;
}
A:
print 2;

表示結果は白紙です。どういうことですか?
087987605/01/21 13:51:47ID:AnHfdE4Z
できました;
0880nobodyさん05/01/21 16:01:36ID:AnHfdE4Z
初歩的ですみませんが、
use CGI:cookie;
などの::はどういう意味でしょうか?

モジュールは通常ファイル名とpackage名が同じでないといけませんよね?
でもactiveperl5.6.1に標準付属のモジュールは結構ファイル名とpackage名が
違うのがあります。
どうしてそれで正常に動作できるのでしょうか?
package名なんてファイルを開いて見ないとわかりませんよね?
0881nobodyさん05/01/21 16:16:38ID:???
>>880
フォルダ内にあるよってことさ。
だから例えば
use lib '/home/ユーザ名/public_html/cgi-bin';
のようにしてcgi-binの中にCGIというフォルダを作成して、その中にCookie.pmを
コピーすればCGI::Cookieの名前で呼び出せる。

まあ標準付属のモジュール以外使えないサーバ使ってる人間にとっては常識なんだがね。
088288005/01/21 17:23:19ID:AnHfdE4Z
>>881
そうなのですか?
今CGI::Sessionをインストールされていないサーバで
自分のPCに入っているPerlモジュールのCGIフォルダをまるごとコピーして
ユーザディレクトリ内にやってみたのですが下記のようなエラーがでました。

Can't locate auto/CGI/Session/autosplit.ix in @INC (@INC contains:
incの中身列挙) at /usr/lib/perl5/5.8.1/AutoLoader.pm line 160.
at /home/tme46901/html/cgi-bin/CGI/Session.pm line 9
test.cgi syntax OK

つまりこれはAutoLoderの160行辺りのauto/CGI/Session/autosplit.ix
このモジュール?ファイル?が見つからないっていうエラーですよね?
実際にAutoLoderの160行付近を捜すと
$path ="auto/$calldir/autosplit.ix";
多分これが原因なんだろうなと思います。

で、なんとなく自分のPCに入っているコンパイル済みのautoディレクトリごと
アップし、use libを一行増やしましたがエラーの内容は変わりませんでした。

これはautosplit.ixを見つけられないというエラーではないのでしょうか?
0883nobodyさん05/01/21 17:52:07ID:???
それはさらに他のファイルに依存しているというだけの話だし、
お前が省略した@INCの中身のどれかのディレクトリの下に
auto/CGI/Session/autosplit.ix があればよし、なければ
インスコがうまくいってないということだな。

0884nobodyさん05/01/21 19:59:35ID:4xlCPraB
apache + mod_perlで作成していたのですが、SSLを導入したところ、
[Thu Jan 20 17:45:21 2005] [error] 1992: ModPerl::Registry: 103:Software caused connection abort at ・・・

といったメッセージが ssl_access_logn に出るようになってしまいました。
sslを使わなければこういうメッセージは出ません。httpsでアクセスした時だけです。

なぜこういうことが起きるのでしょうか?
(このスレで合ってるかな?)
0885nobodyさん05/01/21 20:06:19ID:???
>>884
とりあえずエラーメッセージでぐぐれ。
0886nobodyさん05/01/21 20:18:35ID:4xlCPraB
>>885
日本語のページが無いもので...
0887nobodyさん05/01/21 20:27:59ID:???
>>886
その程度なら諦めるが吉。
0888nobodyさん05/01/21 20:40:01ID:4xlCPraB
親切にどうも。
分からないならそう言えば^^
0889nobodyさん05/01/21 20:50:50ID:???
そこでんな事いわなきゃ親切な香具師が教えてくれた物を、
0890nobodyさん05/01/21 21:09:12ID:???
諦めるか自力で調べる気になったのだろう。
結構なことじゃないか。
0891nobodyさん05/01/22 00:21:34ID:???
>>888
> 分からないならそう言えば^^
「わかりません」のレスが大量に付いたりしてもそれはそれでおもろいな。
0892nobodyさん05/01/22 00:40:13ID:???
わかっちゃいるけど わかりません
スイスイスーダララッタ、スラスラスイスイスイ♪
0893nobodyさん05/01/22 09:44:47ID:e2M6eLer
自分のHPでTrackback Pingを受信したいのですが、

可能ですか?
089488005/01/22 10:18:03ID:6KUU/iOa
>>883
ありがとうございます。あの後自分のpcでppmで再インストールして関係のある
ファイルを確認しました。やはり揃っていたみたいで>>883の言うとおりにlibに
もう一つ渡したらperl -c では成功しました。

しかし何故かブラウザでは500エラーです。
ローカルではブラウザでもちゃんと動作するのに何が原因かわかりませんので、
とりあえずcarpモジュールに頼ってみましたが、何故かエラー内容を出力してくれません;
サーバはactiveperl5.8.1です。
BEGIN {
use CGI::Carp qw(carpout fatalsToBrowser);
carpout(STDOUT);
if ( defined $ENV{'REMOTE_ADDR'} && $ENV{'REMOTE_ADDR'} ne '127.0.0.1' ){
use lib サーバパス;
}else{
use lib ローカルパス;
}
}

宜しくお願いします。
0895nobodyさん05/01/22 10:40:15ID:???
>>894
CGI::CarpのfatalsToBrowserが有効になる前にエラーに
なってるのがいちばんありそうだな。置き方が悪いとか
#!〜のあたりがおかしいとか。

鯖のエラーログを見るのが一番早いと思うのだが。
0896nobodyさん05/01/22 10:48:00ID:???
BEGINルーチン内で制御構造使ってもuseはすべてコンパイルされるだろうに。。
089788005/01/22 10:54:56ID:6KUU/iOa
>>895
#!〜の部分は問題ないです。置き方が悪いかはわかりませんが、
既に稼動させてるCGIは5-6個ありますので、そのときと同じ手順ですので
問題ないかと思うのですが・・・

共用サーバでもエラーログってユーザごとにみられるんですか?
通常どこらへんにあるのでしょうか?

>>896
以前は@INCにpushしてた名残なのです。
089888005/01/22 11:14:58ID:6KUU/iOa
解決しました。
0899nobodyさん05/01/22 12:18:08ID:XoEEKIhN
掲示板を製作中なのですが、
入力フォームのテーブル幅の変え方(Perlに記述する$〜〜)
を教えていただけないでしょうか?

書き込んだ後の、表示される記事のテーブル幅の変え方は分かったのですが
入力フォームがどうしても分かりませんでした。

どうぞヨロシクお願いいたします
0900nobodyさん05/01/22 12:36:59ID:???
>>899
板違い
0901nobodyさん05/01/22 15:42:18ID:6KUU/iOa
例えば
/home/public_html/lib/
というフォルダの中に自作・他作モジュールが混在していて、
libフォルダのなかにもさらに色々なフォルダがあるとします。
中身はもちろんモジュールです。

そういうときに一発で@INCにlibディレクトリから下位層全てを加えるというような
命令を出したいのですが無理でしょうか?
use lib '/home/public_html/lib/';
これでは中のフォルダまでは認識されないみたいなので(windowsでは認識する?)。
いちいち
use lib ('/home/public_html/lib/','/home/public_html/lib/CGI');
などとしないといけないみたいで面倒です。libにオプションでも付けれるかと思いましたが、
perl.docにはそのようなことは書いてありませんでしたし。

エロイ人お願いします。
0902nobodyさん05/01/22 15:54:42ID:???
>>901
ここにはエロイ人はいません。
0903nobodyさん05/01/22 15:59:33ID:???
>>901
File::findとかでディレクトリ一覧を得てからpush
090490105/01/22 17:04:29ID:6KUU/iOa
>>903
ありがとうございます。
ところで
/home/usr/site/lib
などにあるPerlの標準付属モジュールなどはどうやって@INCに追加されているのでしょうか?

モジュールがインストールされたときに自動的にPerl本体のオプションファイル
みたいなものに書き込まれているんでしょうか?
0905nobodyさん05/01/22 17:11:46ID:???
>>904
エロイ人はhttp://sakura01.bbspink.com/hneta/に集まってます。
0906nobodyさん05/01/22 18:12:15ID:???
>>904
言われてみりゃ確かに気になるな・・・
090790105/01/22 19:03:50ID:6KUU/iOa
>>905
そういう意味ではないのですが;
>>906
@INCの中身を見る限りでは大元だけを登録していて、CGIフォルダなどの個別は
してませんよね。
かわりに
multi treed ...なんとかっていう文字がくっついてるんですよね。

それを付けることによりUNIXがこのファイルより下位層という意味を
汲み取っていたりするんですかね?
0908nobodyさん05/01/22 19:07:38ID:???
いいかげんスレ違い

Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
レス数が900を超えています。1000を超えると表示できなくなるよ。