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;