将字符串(作为命令行参数传递给Perl)复制到文本文件中

时间:2010-07-12 19:32:52

标签: perl command-line-arguments

我有一个字符串,其中包含许多带有白色空格的文字,如:

String str = "abc xyz def";

我现在使用C#将此字符串作为命令行参数传递给perl文件,如下所示:

Process p = new Process();
p.StartInfo.FileName = "c:\\perl\\bin\\perl.exe";
p.StartInfo.Arguments = "c:\\root\\run_cmd.pl " + str + " " + text_file;

在run_cmd.pl文件中,我有以下内容:

open FILE, ">$ARGV[1]" or die "Failed opening file";
print FILE $ARGV[0];
close FILE;

在打印时,我只能将字符串的一部分,即“abc”复制到text_file中,因为Perl会将其解释为单个参数。

我的问题是,我是否可以将整个字符串复制到包含空格的文本文件中?

4 个答案:

答案 0 :(得分:2)

如果您希望将空格分隔的参数视为单个参数,对于大多数程序,您需要用" "

将其括起来

例如run_cmd.pl "abc xyz def" filename

尝试

p.StartInfo.Arguments = "c:\\root\\run_cmd.pl \"" + str + "\" " + text_file;

旁注:

我不知道windows,但是在Linux中有一个number of arguments and maximum length of one argument limit所以你可能要考虑以其他方式传递字符串,例如从tmp文件中读取它。

答案 1 :(得分:2)

这有点像黑客,但

$ARGV[$#ARGV]

将是@ARGV中的最后一项,

@ARGV[0 .. ($#ARGV - 1)]

将是之前的一切。

答案 2 :(得分:1)

它不是perl - 它是你的外壳。你需要在参数周围加上引号:

p.StartInfo.Arguments = "c:\\root\\run_cmd.pl '" + str + "' " + text_file;

如果text_file来自用户输入,您也可能想引用它。

(您还需要转义strtext_file中的任何现有引号;我不确定在Windows中转义引用的正确方法是什么?

答案 3 :(得分:0)

@meidwar说:“你可能想考虑以其他方式传递字符串,例如从tmp文件中读取它”

我建议你看一下管道打开。请参阅http://search.cpan.org/~jhi/perl-5.8.0/pod/perlopentut.pod#Pipe_Openshttp://perldoc.perl.org/perlipc.html#Using-open()-for-IPC

这些允许您发送与被叫代码可以处理的数据一样多的数据,并且不受操作系统命令行的限制。