【问题标题】:Copying a string(passed as command line arguments to Perl) into text file将字符串(作为命令行参数传递给 Perl)复制到文本文件中
【发布时间】:2011-03-14 23:34:40
【问题描述】:

我有一个包含大量带有空格的文本的字符串,例如:

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 将其解释为单个参数。

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

【问题讨论】:

    标签: perl command-line-arguments


    【解决方案1】:

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

    例如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 文件中读取它。

    【讨论】:

      【解决方案2】:

      这不是 perl —— 这是你的 shell。您需要在参数周围加上引号:

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

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

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

      【讨论】:

        【解决方案3】:

        这有点小题大做,但是

        $ARGV[$#ARGV]
        

        将是@ARGV 中的最后一项,并且

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

        在那之前的一切。

        【讨论】:

        • 谢谢!我还是新手,如果你觉得有用,请随时给我点。
        【解决方案4】:

        @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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-06
          • 1970-01-01
          • 2019-11-20
          • 1970-01-01
          • 2012-10-21
          • 2012-12-21
          • 1970-01-01
          相关资源
          最近更新 更多