【问题标题】:Perl Can't modify constant item in substitutionPerl不能修改常量项替换
【发布时间】:2014-11-03 11:21:27
【问题描述】:

我有 Perl 脚本用于删除我正在创建的 xml pdf 文件膨胀的不必要标签

#!/usr/bin/perl

#use strict;

use DirHandle;

my $sourcefile = shift;
my $outputfile = "new" . $sourcefile;

open SOURCEFILE, "$sourcefile" or die;
open OUTPUTFILE, ">$outputfile" or die;

$flag = 0;
foreach $line (<SOURCEFILE>) {
  if($line=~ /<\?templateDesigner StyleID aped2\?>\n/) {
    if($flag == 1) {
      line=~ s/[\t]*<\?templateDesigner StyleID aped2\?>\n//gi;
    }
    $flag=1;
  }
  elsif($line=~ /<\?templateDesigner StyleID aped3\?>\n/) {
    if($flag == 1) {
      $line=~ s/[\t]*<\?templateDesigner StyleID aped3\?>\n//gi;
    }
    $flag=1;
  }
  elsif($line=~ /<\?templateDesigner StyleID apcb1\?>\n/) {
    if($flag == 1) {
      $line=~ s/[\t]*<\?templateDesigner StyleID apcb1\?>\n//gi;
    }
    $flag=1;
  }
  else {
    $flag=0;
  }
  print OUTPUTFILE $line;
}

close SOURCEFILE;
close OUTPUTFILE;

我运行此脚本的结果是以下错误。

无法在 d:\Temp\PDFPatch2.pl 第 1 行修改常量项以替换 (s///) 7、靠近“s/[\t]*\n//gi;” d:\Temp\PDFPatch2.pl 的执行因编译错误而中止。

抱歉对perl不太了解。

【问题讨论】:

  • 不要关闭strict。打开warnings。这可能会表明您在第 17 行打错字,并从 $line 前面省略了 $
  • 关闭strictwarnings 就像在没有安全带的情况下在黑暗中驾驶:它不会让驾驶更安全,你只是在撞车之前看不到危险。
  • 错误信息不是问题。它们是问题的宝贵路标。只是关掉它们然后寻求帮助有点疯狂。

标签: perl pdf


【解决方案1】:

不要关闭strict。 打开warnings

这可能会表明您在第 17 行打错字了,并从 $line 前面省略了 $

【讨论】:

  • 我在前面添加了$,并开启了严格和警告。现在我收到以下错误消息。真的很抱歉,但说到 perl,我真是个菜鸟。全局符号“$flag”需要在 d:\Temp\PDFPatch2.pl 第 14 行显示包名。
  • 我在$flag$line前面添加了my。这现在声明了一个我可以使用的变量。现在刚刚收到一条消息Died at d:\Temp\PDFPatch2.pl line 12.
  • open OUTPUTFILE, "&gt;$outputfile" or die;。将其更改为die $!,它会告诉您为什么无法打开文件。
  • 好的,我在使用脚本时发现了最后一个问题,我不应该指定文件的完整路径,因为这会导致路径无效,因为单词 new 将被添加到前面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多