0

これは私の perl スクリプト コードです。これで、「演算子が $cmd で期待した場所にベアワードが見つかりました」のようなエラーが発生します

my $path = $folder."/".$host."_".$database_name.".bak";
$cmd .= "-U $user_name -P $password -S $host -d master -Q "BACKUP DATABASE [$database_name] TO DISK = N'$path'" ";

誰でも私を助けますか?

4

2 に答える 2

4

文字列に二重引用符が含まれている場合は、 でエスケープする必要があります\

$cmd .= "-U $user_name -P $password -S $host -d master -Q \"BACKUP DATABASE [$database_name] TO DISK = N'$path'\" ";

また、Perl では、引用区切り文字に他の文字を使用できます。qqほとんどすべての文字が続く場合は、二重引用符と同じです。したがって、バックスラッシュの必要性を避けるために、次のようなことができます。

$cmd .= qq(-U $user_name -P $password -S $host -d master -Q "BACKUP DATABASE [$database_name] TO DISK = N'$path'" );

$cmd .= qq|-U $user_name -P $password -S $host -d master -Q "BACKUP DATABASE [$database_name] TO DISK = N'$path'" |;

等々...

更新: Perl でシステム コマンドを実行する方法。次の 3 つの基本的な方法があります。

system($cmd);  #Goes through the shell if shell metacharacters are detected.
system(@command_and_args);  #first element is the command, the rest are arguments

systemコマンドを実行し、それが戻るのを待ちます。戻り値は、プログラムの終了ステータスです。

my @results = `$cmd`;  #Always goes through shell.

バッククォートはコマンドを実行し、その出力を返します。これは、実際に出力が必要な場合にのみ使用してください。それ以外の場合は、 を使用することをお勧めしsystemます。

exec $cmd;
exec @command_and_args;

exec戻らないことを除いて、system とまったく同じです。別のプログラムを呼び出して、プログラムを効果的に終了します。

状況に最も適したものを使用してください。または、この場合、SQL を実行しているので、DBIモジュールの使用を検討してください。いくつかの単純なコマンドよりも優れたアプローチであることは間違いありません。

于 2012-10-22T07:39:06.140 に答える
1

"キャラクターを間違った場所に置いているようです。それらがどこにあるべきかわかりません。

2 行目の文字列リテラル:

"-U $user_name -P $password -S $host -d master -Q "

直後にベアワードが続きます

BACKUP
于 2012-10-22T07:25:15.053 に答える