Perl 子程序(函数)
Perl 子程序可以出现在程序的任何地方,语法格式如下:
sub subroutine{
statements;
}
调用子程序语法格式
subroutine( 参数列表 );
在 Perl 5.0 以下版本调用子程序方法如下
&subroutine( 参数列表 );
向子程序传递参数
Perl 子程序可以和其他编程一样接受多个参数,子程序参数使用特殊数组 @_ 标明。
因此子程序第一个参数为 $_[0], 第二个参数为 $_[1], 以此类推。
不论参数是标量型还是数组型的,用户把参数传给子程序时,perl默认按引用的方式调用它们。
子程序返回值
子程序可以向其他编程语言一样使用 return 语句来返回函数值。
如果没有使用 return 语句,则子程序的最后一行语句将作为返回值。
#!/usr/bin/perl
# 方法定义
sub add_a_b{
# 不使用 return
$_[0]+$_[1];
# 使用 return
# return $_[0]+$_[1];
}
print add_a_b(1, 2)
Perl 包和模块
Perl 中每个包有一个单独的符号表,定义语法为:
package mypack;
例子程序:
文件名为db_operate.pm的库perl文件
#!/usr/bin/perl -w
use strict;
use DBI;
package sql;
sub execute {
my $host = "localhost";
my $driver = "Pg";
my $database = "library";
my $user = "admin";
my $passwd = "157359";
my $stmt = $_[0];
my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";;
my $dbh = DBI->connect($dsn,$user,$passwd) or die $DBI::errstr;
my $sth = $dbh->prepare($stmt);
$sth->execute();
my @array;
while ( my @row = $sth->fetchrow_array() ) {
push(@array,[@row]);
}
return @array;
$sth->finish();
$dbh->disconnect;
}
1; #不添加执行db_test.cgi时会出现错误db_operate.pm did not return a true value at db_test.cgi line 7.
# BEGIN failed--compilation aborted at db_test.cgi line 7.
文件名为db_test.cgi文件去调用模块文件db_operate.pm中的包sql里的execute函数,传入参数为$sql,传出参数为@array:
#!/usr/bin/perl -w
use strict;
use JSON;
use CGI;
use Encode;
use db_operate; #调用模块文件db_operate.pm,还可用require函数调用文件,但是其调用方式为require db_operate.om;
my $sql = "select * from lib_user";
my @array = sql::execute($sql); #调用sql包中的execute函数,其参数为$sql
my $json = decode_utf8(encode_json \@array);
my $q = new CGI;
print $q->header(-charset=>'utf-8',-type=>'application/json');
print $json;