如何将字符串附加到Perl中的下一行

时间:2010-04-09 16:32:57

标签: perl

我有以下描述的要求。

这只是一个示例脚本:

$ cat test.sh

#!/bin/bash

perl -e '
open(IN,"addrss");
open(out,">>addrss");
@newval;

while (<IN>)
{
    @col_val=split(/:/);
    if ($.==1)
    {
        for($i=0;$i<=$#col_val;$i++)
        {
           print("Enter value for $col_val[$i] : ");
           chop($newval[$i]=<STDIN>);
        }
        $str=join(":");
        $_="$str"
        print OUT;
    }
    else
    {
        exit 0;
    }
}
close(IN);
close(OUT);

运行此scipt:

    $ ./test.sh
Enter value for NAME : abc
Enter value for ADDRESS : asff35
Enter value for STATE : XYZ
Enter value for CITY : EIDHFF
Enter value for CONTACT
 : 234656758
$ cat addrss
NAME:ADDRESS:STATE:CITY:CONTACT
abc:asff35:XYZ:EIDHFF:234656758

当我第二次跑它时:

$ cat addrss
NAME:ADDRESS:STATE:CITY:CONTACT
abc:asff35:XYZ:EIDHFF:234656758ioret:56fgdh:ghdgh:afdfg:987643221  ## it is appended in the same line...

我希望将它添加到下一行。

注意: 我想通过在Perl中使用文件句柄而不是在shell中使用重定向操作符来做到这一点。

3 个答案:

答案 0 :(得分:1)

我认为您需要在打印出来之前为字符串添加换行符:

$_="$str\n";

另外,您的脚本是否以bash形式执行,并且在脚本中执行了“perl -e”?为什么不将脚本文件作为perl执行?

答案 1 :(得分:0)

我认为如果您在打印的字符串末尾添加换行符,则可以使用:

$_="$str\n"

答案 2 :(得分:0)

print OUT $_ . "\n";

而不是打印,请使用printf并在正面或背面添加换行符。