Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 脚本仅读取输入文件的最后一行_Perl_Scripting - Fatal编程技术网

Perl 脚本仅读取输入文件的最后一行

Perl 脚本仅读取输入文件的最后一行,perl,scripting,Perl,Scripting,我的输入文件中的值(list_muni_nav.txt)。每一行都是一个文件的路径,这里的“test”和“test2”是文件名 /iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test /iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test2 我的pe

我的输入文件中的值(list_muni_nav.txt)。每一行都是一个文件的路径,这里的“test”和“test2”是文件名

/iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test
/iwmnt/default/main/Content/Munic/WORKAREA/work/templatedata/muni_site/security/data/test2
我的perl脚本(如下)应该读取输入文件中的每一行并执行它们。但是,除了最后一行之外,脚本没有找到其余的行。请看结果

    my $content_list = '/home/p12/scripts/list_muni_nav.txt';

print "\t*****************START***************************\n";
print "\tOpening file $content_list\n";
if (open FILE,"$content_list") {
        my $line = <FILE>;
        chomp($line);
        while ($line ne "") {
                print "\t Applying EAs to file $line\n";

                my $setEAVersion= "$getAttrib -s TeamSite/Assocation/Version=1 \"$line\"";
                                 `$setEAVersion`;
                my $setEADCRType= "$getAttrib -s TeamSite/Templating/DCR/Type=muni_site/nav \"$line\"";
                                 `$setEADCRType`;
                my $setEAFormValid= "$getAttrib -s iw_form_valid=true \"$line\"";
                                 `$setEAFormValid`;

                print "\t EAs applied successfully to $line\n";
                print "\t**********************************************************\n";

                $line = <FILE>;
                chomp($line);
        }

请帮忙。谢谢

我认为@stark是对的,你的问题是换行符。将删除与特殊变量
$/
对应的任何尾随字符串,这在Windows和Linux上是不同的。您可以使用正则表达式来解决此问题:

my $content_list = '/home/p12/scripts/list_muni_nav.txt';

print "\t*****************START***************************\n";
print "\tOpening file $content_list\n";
if (open my $fh, "<", "$content_list") {
    while (my $line = <$fh>) {
        $line =~ s/\s+$//;
        print "\t Applying EAs to file $line\n";

        my $setEAVersion= "$getAttrib -s TeamSite/Assocation/Version=1 \"$line\"";
        `$setEAVersion`;
        my $setEADCRType= "$getAttrib -s TeamSite/Templating/DCR/Type=muni_site/nav \"$line\"";
        `$setEADCRType`;
        my $setEAFormValid= "$getAttrib -s iw_form_valid=true \"$line\"";
        `$setEAFormValid`;

        print "\t EAs applied successfully to $line\n";
        print "\t**********************************************************\n";
    }
my$content_list='/home/p12/scripts/list_muni_nav.txt';
打印“\t*************************开始********************************************\n”;
打印“\t打开文件$content\u列表\n”;

如果(打开我的$fh,"您的输出似乎显示循环运行了两次,每行一次。我是否遗漏了什么?您好,Tom,脚本运行了两次,因为输入文件中有两行。每行是文件的路径,这里的“test”和“test2”是文件名。好的,所以问题不在于循环本身。如果颠倒输入文件中的行顺序,会发生什么文件?明显的问题,您是否检查过文件
test
是否确实存在?是的,test和test2两个文件存在于同一位置。我使用VI编辑器更改了输入文件中的顺序,发现“test”和“test2”的定位错误。当我更改顺序时(“test”在最后一行)在Windows记事本中并使用WinSCP在Linux框中上载输入文件时,仅“test2”出现位置错误。听起来像是错误的换行符。在Windows上编辑后,您将获得一个额外的字符。这非常有用。非常感谢@Tom。非常感谢您的帮助。@user3235274没问题,很高兴您将其排序。
my $content_list = '/home/p12/scripts/list_muni_nav.txt';

print "\t*****************START***************************\n";
print "\tOpening file $content_list\n";
if (open my $fh, "<", "$content_list") {
    while (my $line = <$fh>) {
        $line =~ s/\s+$//;
        print "\t Applying EAs to file $line\n";

        my $setEAVersion= "$getAttrib -s TeamSite/Assocation/Version=1 \"$line\"";
        `$setEAVersion`;
        my $setEADCRType= "$getAttrib -s TeamSite/Templating/DCR/Type=muni_site/nav \"$line\"";
        `$setEADCRType`;
        my $setEAFormValid= "$getAttrib -s iw_form_valid=true \"$line\"";
        `$setEAFormValid`;

        print "\t EAs applied successfully to $line\n";
        print "\t**********************************************************\n";
    }