たっちゃんへ、
なるほど。
UNIXからの移植ということであれば、もろもろの関係で perl.exe の方が安心でしょう。
今回の場合は、
$id = './data/id';
のところを絶対パスにすれば PerlIS.dll でも動作すると思いますが。
あと、tie の戻り値なども見るようにしてなぜエラーになるのかを確かめるか、ファイルまたはディレクトリの存在チェックなどもあった方がいいのでしょう。
中田昭雄様
SDBM_Fileが使えない、と相談させていただいたたっちゃんです。
仰せの通りPerlIS.dllでなく、perl.exeにすることでデータベースは使えました。
ありがとうございました。
先のコメントで言葉足らずだった現象について、念のため記しておきます。
<うまくいかない現象>
データベース(ハッシュテーブル?)ファイルが生成されない
<PerlIS.dllからPerlにしてからの現象>
手動で実行したときと同じファイルが生成された
ありがとうございました。
たっちゃんへ、
「うまく使えません」というのは、どうなるのでしょうか?
どういう結果になるのか(あるいは、どういうエラーになるのか)を説明してください。
なお、AN HTTPDでのPerlの実行でPerlIS.dll を使っているのでしたら、perl.exe を使うようにした方がいいと思います。
どうしても PerlIS.dll を使うのであれば、ファイルの指定は絶対パスにしておいた方がよいでしょう。
こんにちは。
あるUNIX用スクリプトをWindows用に書き直しているのですが、SDBM_FileがAN HTTPD経由だとうまく使えません。
DOS窓から直接 >Perl (実効CGIファイル)
とした場合は期待通りの動きをします。
何かAN HTTPD側の設定で不足しているところがあるのでしょうか?
教えてください。
----コード----
###!/usr/local/ActivePerl-5.6/bin/perl -w
########################################################################
$id = './data/id';
$email = 'email@japan.com';
$cryptpswd = 'hello';
&CreateDB;
&Registrar;
exit;
############################################################
sub CreateDB {
use SDBM_File;
sub O_CREAT { 0x0100 }
sub O_BINARY { 0x8000 }
sub O_RDWR { 0x0002 }
tie( %ID, "SDBM_File", $id, O_RDWR | O_CREAT | O_BINARY, 0666 )
|| error ("Create SDBM_File Failure => $id");
foreach (keys %ID) {
push(@refemail,$ID{$_}) if $_ =~ /^\d+$/;
}
untie( %ID );
if (grep($_ eq $email,@refemail) > 0){
error("Access Denied! => $email");
exit;
}
}
############################################################
#登録
sub Registrar{
use SDBM_File;
tie( %ID, "SDBM_File", $id, O_RDWR | O_CREAT | O_BINARY, 0666 )
|| error ("管理者のミスです。登録者データベースに登録できません。");
$ID{$email} = $cryptpswd;
untie %ID;
}
---
AN HTTPD 1.36b
ActivePerl 5.6.1 build 630