Perl创建字节数组和文件流

时间:2013-05-14 13:29:45

标签: perl cgi bytearray bytearrayoutputstream

我需要能够发送文件流和字节数组作为对HTTP POST的响应,以便测试产品。我使用CGI perl作为后端,但我对Perl还不是很熟悉,而且我不是开发人员,我是Linux管理员。基于查询字符串发送字符串非常简单,但我仍然坚持这两个要求。下面是将返回具有正确或不正确的页面的脚本,具体取决于查询字符串。如何添加逻辑以返回文件流和字节数组?

#!/usr/bin/perl
use CGI ':standard';

print header();
print start_html();

my $query = new CGI;
my $value = $ENV{'QUERY_STRING'};


my $number = '12345';

if ( $value == $number ) {
print  "<h1>Correct Value</h1>\n";
} else {
print "<h1>Incorrect value, you said: $value</h1>\n";
}
print end_html();

1 个答案:

答案 0 :(得分:2)

很高兴看到新人们从系统管理员领域涉足Perl。这正是我开始的方式。

首先,如果您打算使用CGI.pm模块,我建议您在整个脚本中使用它。您之前输入<h1>的位置可以使用CGI对象为您执行此操作。最后,您将获得更清晰,更易于管理的代码:

#!/usr/bin/perl
use CGI ':standard';

print header();
print start_html();

my $value = $ENV{'QUERY_STRING'};
my $number = '12345';

if ( $value == $number ) {
    h1("Correct Value");
} else {
    h1("Incorrect value, you said: $value");
}

print end_html();

请注意,只有这是一个数字时,您的比较运算符(==)才有效。要使其与字符串一起使用,请使用eq运算符。

关于文件流和字节数组的含义的一点澄清......按文件流,您是否想要将文件打印到客户端?如果是这样,这将很简单:

open(F,"/location/of/file");
while (<F>) {
    print $_;
}
close(F);

这将打开链接到指定文件的文件句柄,只读,逐行打印内容,然后关闭它。请记住,这将按原样打印出文件,并且在HTML页面中看起来不会很漂亮。如果将Content-type标题更改为“text / plain”,则可能更符合您要查找的内容。为此,请将打印HTTP标头的调用修改为:

 print header(-type => 'text/plain');

如果你走这条路,你也想要删除start_html()end_html()来电。

至于字节数组,我想我需要更多关于正在打印的内容以及你希望如何格式化的信息。