分隔符编码问题



如果我按原样运行此脚本,它可以工作。
但是为什么这不适用于cgi
当我使用_1_而不是_0_时,它也适用于cgi

#!/usr/bin/env perl
use warnings;
use 5.012;

###    script_1.cgi    #########################################
my @array = ( '1524', '2.18 MB', '09/23/03', '_cool_name_', 'type' );
my $row = join "_0_", @array;
say $row;
# submit $row to script_2.cgi

###    script_2.cgi    #########################################
# ...
# my $row = $cgi->param('row');
# my $name;
if ( $row =~ /_0_([^0]+)_0_typez/ ) {
#   $name = $1;
    say "Name: <$1>";
} else {
    die "<$row> $!";
}
# Software error:
# <1524_�_2.18 MB_�_09/23/03_�__cool_name__�_type>  at script_2.cgi line of "die "<$row> $!";"

我有用,_cool_name_说。您可能已经为自己使用 CGI.pm 冲突,但由于您没有发布完整的代码,因此没有人可以肯定地说。

我会利用这个机会不问这个问题。您应该学习的教训是:

  1. 避免采用自己的序列化方案。作为初学者,您犯了一个典型的错误,即如果分隔符出现在数据中,则不对其进行编码(例如字符串表达式中的双反斜杠和 sprintf 表达式中的双百分比)。数组可以通过例如 JSON 完整地未连接地传递。
  2. 它们应该是同一程序中的两个子例程,而不是两个脚本。这样,您就可以传递数据结构而无需序列化。

相关内容

  • 没有找到相关文章

最新更新