我有一个包含文件名的Perl脚本,其中包含句点:
$zipfile = FS.one.two.$file_date_str.three.1_1.zip;
其中$file_date_str
包含YYYYMMDD
格式的日期。
我想在本地读取此文件,然后将ftp
读取到远程位置。远程位置的文件名是不同的,因为它必须以CD.ABCD123.
为前缀
我在下面写了一行来做这件事:
$filePrefix=CD.ABCD123.;
$scpcmd = '$myscriptdir/ftpscript $zipfile $filePrefix${zipfile} ${REMOTE_ID}@${REMOTE_SERVER}';
print L $scpcmd . "\n";
$ret=system($scpcmd);
ftpscript
是一个unix shell脚本,它将文件ftp到远程位置。
我在运行此操作时遇到以下错误:
Bareword found where operator expected at my_script_name line 77, near "1_1.zip"
(Missing operator before zip?)
Bareword found where operator expected at my_script_name line 92, near "1_1.zip"
(Missing operator before zip?)
syntax error at my_script_name line 77, near "1_1.zip"
syntax error at my_script_name line 92, near "1_1.zip"
我是Perl脚本的新手。有人可以帮忙解决我上面做错的事吗?
答案 0 :(得分:0)
根据您的示例(显示已编辑,使其更难以排除故障),看起来好像您没有引用字符串。
而不是
$zipfile = FS.one.two.$file_date_str.three.1_1.zip;
试
$zipfile = "FS.one.two." . $file_date_str . ".three.1_1.zip";
答案 1 :(得分:0)
按照潜行的有关设置zipfile
的建议,但您还需要进行一些更改
变化:
$scpcmd = '$myscriptdir/ftpscript $zipfile $filePrefix${zipfile} ${REMOTE_ID}@${REMOTE_SERVER}';
分为:
$scpcmd = "$myscriptdir/ftpscript $zipfile $filePrefix${zipfile} ${REMOTE_ID}\@${REMOTE_SERVER}";
顺便说一下,请务必注意双引号字符串中的\@
。这是为了防止perl查找数组。 (例如)"hello @world"
将尝试嵌入名为world
的数组,就像world
"hello $world"
的标量一样