実体
従来、ファイルXYZ.pm
に保持されXYZ
パッケージ。 Perlはあなたのパッケージを見つけられません。したがって、ファイルはscript.pm
ではなくCC.pm
である必要があります。
パッケージOrganization::Team::Purpose
がファイルPurpose.pm
に保持されているが、ファイルはサブディレクトリOrganization/Team
に保持され、Organization
でのサブディレクトリである場合Organization
を保持するベース・ディレクトリが-I/some/where
を用いて(パールによって発見されなければならないことを注意たとえば、ディレクトリ/some/where
、それが現在のディレクトリのサブディレクトリであれば、とにかくそれが見つかります)。
接続の試行後にor
節を確認してください。通常、あなたはdie
またはcroak
です。あなたは単純に文字列を評価しますが、あまり有用ではありません。
あなたが持っている:
my $db = DBI->connect("dbi:SQLite:$dbFile","","",
{RaiseError =>1, AutoCommit => 1})or "Unable to connect: $DBI::errstr\n";
あなたは何をすべきかを検討する必要がありますが、一つの技術がある:「
use Carp;
my $db = DBI->connect("dbi:SQLite:$dbFile", "", "",
{ RaiseError => 1, AutoCommit => 1 })
or croak "Unable to connect: $DBI::errstr\n";
ことの欠点は、これがモジュールに起こっているということであり、それはにISNモジュールのBEGINコードを掘り下げるのはいいアイデアです(モジュールがロードされるとコードが実行されることを前提にしています)。 undef
データベースハンドルを格納し、他の方法がそれを使用するのを防ぐ必要があります。 new
コンストラクタが使用されるまで(おそらくは初めて)、データベースへの接続操作を延期するほうがよいでしょう。その時点でエラーを発生させることは、少なくとも正当なものです。
回答はDVKと書いてありましたが(私の答えを書いてしまう前に)、モジュールは1;
で終了し、ロードが成功したことを示します。最終的な条件は 'defined $db ? 0 : 1;
'(または単に 'defined $db;
')でもかまいませんが、問題を説明するために何らかのエラーメッセージを生成することが重要です。
トリビア
あなたも、事業者の周りの間隔で情け容赦なく一貫している必要があります。あなたの例が含まれています:
より良いように記述されるだろう
{RaiseError =>1, AutoCommit => 1}
my $class = ref($that)|| $that;
CURRENTOFFSET=> undef,
:それは直接操作には影響を与えません
{ RaiseError => 1, AutoCommit => 1 }
:最初は少しより多くのスペースの恩恵を受ける可能性がある
{RaiseError => 1, AutoCommit => 1}
my $class = ref($that) || $that;
CURRENTOFFSET => undef,
をコードのそれは少し読みにくいです。一貫していることを学ぶことは、プログラムの学習の重要な部分です。
問題が何ですか。エラーメッセージがありますか? – Nick
コードのコードブロックを使用して質問の書式を設定してください。方法がわからない場合は、尋ねてください。 – toolic
これは昨日の質問の拡張版です。昨日の質問よりも優れています。なぜなら、批評するためのコードが含まれているからですが、問題の内容が分かりません。 –