首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl语法错误:在需要运算符的位置找到了空字

Perl语法错误:在需要运算符的位置找到了空字
EN

Stack Overflow用户
提问于 2012-10-22 15:17:21
回答 2查看 4.5K关注 0票数 0

这是我的perl脚本代码。在这段代码中,我得到了类似于“在$cmd期望操作符的地方找到了”这样的错误。

代码语言:javascript
复制
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'" ";

有谁能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-22 15:39:06

当字符串中有双引号时,您需要使用\对其进行转义。

代码语言:javascript
复制
$cmd .= "-U $user_name -P $password -S $host -d master -Q \"BACKUP DATABASE [$database_name] TO DISK = N'$path'\" ";

此外,Perl允许您使用其他字符作为引号分隔符。qq后跟几乎任何字符都与双引号相同。因此,您可以这样做,以避免需要反斜杠:

代码语言:javascript
复制
$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:如何在中执行系统命令。有三种基本方法:

代码语言:javascript
复制
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执行一个命令并等待它返回。返回值是程序的退出状态。

代码语言:javascript
复制
my @results = `$cmd`;  #Always goes through shell.

Backticks执行命令并返回其输出。只有在实际需要输出时才应该使用它;否则,最好使用system

代码语言:javascript
复制
exec $cmd;
exec @command_and_args;

exec和system完全一样,只是它永远不会返回。它通过调用另一个程序来有效地结束你的程序。

使用最适合您的情况的方法。或者,在本例中,由于您正在执行SQL,因此可以考虑使用DBI模块。对于任何比几个简单命令更好的方法,这绝对是一种更好的方法。

票数 4
EN

Stack Overflow用户

发布于 2012-10-22 15:25:15

看起来你把"字符放错了地方。我不确定他们应该在哪里。

在第二行中,字符串文字:

代码语言:javascript
复制
"-U $user_name -P $password -S $host -d master -Q "

紧跟在后面的是赤裸裸的

代码语言:javascript
复制
BACKUP
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13006624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档