-3

我正在开发 perl 应用程序,我想在我的 javascript 警报中打印 perl 数组,但它不起作用,这是我的代码

sub leaveInfo{
            my ( $title_id ) = @_;
            $sql = "SELECT tab_timeslot.`location` , tab_timeslot.`date` , tab_timeslot.`time` , tab_timeslot.`end_time`
            FROM tab_appointment
            INNER JOIN tab_timeslot ON tab_appointment.timeslot_id = tab_timeslot.timeslot_id
            WHERE tab_appointment.lecture_id ='" . $title_id ." '";
            $query = &statement_database($sql);
            my @co; 
            my @arro;
            my $num = 0;
            while(my(@co)=$query->fetchrow_array){
             push (@arro,$co[$num]);
            $num++; 
            }
            print @arro;

        }   

        print '<script type="text/javascript">' . "\n" .
              '   Check = confirm("Do you really want to leave this lecture?'.leaveInfo(1215).'");' . "\n" .
              '   if (Check == false) history.back();' . "\n" .
              '   else                location.href="index.pl?value=my_events&to_do=leave_lecture_exec&user_id=' . $cgi->param('user_id') . '&title_id=' . $cgi->param('title_id') . '"' .  "\n" .
              '</script>' . "\n";



        }

警报仅显示存储在数组中的对象数量而不是数组本身的值,任何帮助都会有所帮助

4

1 回答 1

1

为了得到你说你得到的输出,你有

sub leaveInfo{
   ...
   return @arro;
}

尽管您声称拥有

sub leaveInfo{
   ...
   print @arro;
}

这实际上是一件好事。


@array在列表上下文中计算为值列表。

@array在标量上下文中计算数组中元素的数量。

连接运算符必须在标量上下文中评估其操作数,这就是为什么您要获取数组中元素的数量。

@a = qw( a b c d );
print @a."\n";   # 4

在你的情况下,你可以使用

print '... confirm("... '
    . join(' ', leaveInfo(1215))
    . '");...';

除非任何字符串包含"or时失败\。更好的:

sub to_js_str_literal {
   my ($s) = @_;
   $s =~ s/([\\"])/\\$1/g;
   return qq{"$s"};
}

print '... confirm("... "+'
    . to_js_str_literal(join(' ', leaveInfo(1215)))
    . ');...';
于 2013-05-16T09:22:24.543 回答