CGI传递二(N)维数组新思路

CGI传递二(N)维数组新思路

前几天看了几位前辈讨论CGI传递数组的问题的文章.发现的确好用.

最近写程序希望CGI能传递二维数组,我试过用上面的方法,结果失败.可能是我的用法错误,希望有高手可以指点下.

想了半天,觉得二维数组是否可以把@arr[m][n]的第一个下标放到数组名字里,变成@arrm[n],这样二维数组不就变成一维数组了么.

尝试写了下代码,发现效果不错.

代码写的很难看,只求效果,高手见笑了.

1.pl
#!/usr/bin/perl -w


use CGI;

$q=new  CGI;
$n=1;
$m=1;

$num1=6;                             #定义行数
$num2=8;                             #定义列数
for $x (1..$num1) {                  #定义一个一维数组@arr1,@arr2..,每个$arr$x一个数组的引用
    $m=1;
    $arrstr="arr$x";
    @{$arrstr};
    for $y (1..$num2) {
        
        ${$arrstr}[$y]=10*$n+$m;
        
        $m++;
    }
    $n++;
}

print    $q->header(-charset=>"GB2312"),
        $q->start_html(),
        $q->start_form(-method=>"post",-action=>"2.pl");
foreach  $nn (1..$num1) {            #提交数组变量
        $arrstr="arr$nn";
        print $q->hidden(-name=>"rec$nn",-value=>\@{$arrstr});
        print "rec$nn,$arrstr<br>";  
}
print $q->hidden(-name=>num,-value=>"$num1");
                                     #将一维数组的个数,即"m"提交给下一页面
        foreach $x (1..$num1) {      #打印数组
            foreach $y (1..$num2) {
                $arrstr="arr$x";
                print "${$arrstr}[$y] ";
                $y++;
            }
            print "<br>";
            $x++;
        }
print   $q->submit(),
        $q->end_form(),
        $q->end_html;







2.pl
#!/usr/bin/perl -w


use CGI;

$q=new CGI;
print $q->header;
print "Get array from CGI<br>\n";
my $params = $q->Vars;
$num=$q->{'num'};
foreach $x (1..$num) {
    $tmp="rec$x";
    my @myarray = split "\0", $params->{"$tmp"};
    print "@myarray<BR>";
}




print $q->end_html;



刚开始学用perl CGI编程,看不懂,楼主有什么好的教程推荐吗?
我也从网上找了一些教程,好像都是比较老的教程,输出html代码时都用here文档形式,
用面向对象的方法,代码会简洁一些吧,可是找不到这方面的教程
看CGI的话直接看CPAN好了
http://search.cpan.org/~lds/CGI. ... _HTML-TAG_FUNCTIONS