-1

一直在寻找这个问题的答案,但没有运气。可耻地问,因为我认为我错过了一些基本的东西。此代码是 HTML 表单+CGI 脚本的一部分,该脚本上传文件、提取文件,然后根据表单选择以 HTML 格式从上传的文件中显示信息。这部分是在名为“mylogs”的目录中创建一个 .xml 文件列表,然后删除一些路径并添加字符以使其成为有效的 HTTP 链接。

它一直运行直到for (@array) {s/^/<a href="/};小于字符导致问题,因为如果我删除它,它会处理其他所有内容。包含小于符号时,它会删除所有输出。

my $dir = "$upload_dir/var/mylogs";
my @array = <$dir/*.xml>;
for (@array) {s/\/volume1\/web//g};
for (@array) {s/^/http:\/\/192.168.1.155/g};
for (@array) {s/^/<a href="/g};
for (@array) {s/$/<a\/>/g};

我也尝试过逃避角色,但也没有成功。任何想法为什么会发生或完成上述最终结果的更好方法?

谢谢你的时间。

4

2 回答 2

4

您没有正确关闭标签(/g替换时不需要使用修饰符^or $):

$_ = '/foo';
s/^/http:\/\/192.168.1.155/;   
  # Result is: http://192.168.1.155/foo
s/^/<a href="/;
  # Result is: <a href="http://192.168.1.155/foo
s/$/<a\/>/;
  # Result is: <a href="http://192.168.1.155/foo<a/>
  # Should be: <a href="http://192.168.1.155/foo"> What do you want here? </a>

您是否真的查看过您生成的 HTML 的源代码?

于 2013-04-14T01:10:04.020 回答
2

你没有证明你的问题,你的说法是错误的。

$ perl -E'
   my @array = qw( foo bar );
   for (@array) {s/^/<a href="/g};
   say for @array;
'
<a href="foo
<a href="bar
于 2013-04-14T02:25:04.007 回答