подпрограммы Perl (функция)
подпрограммы Perl, который является пользователем функция.
подпрограммы Perl, который представляет собой фрагмент кода для выполнения специальных задач разделения, он может сделать, чтобы уменьшить дублирование кода и сделать программу легкой для чтения.
подпрограмма Perl может появиться в любом месте в программе, синтаксис выглядит следующим образом:
sub subroutine{ statements; }
Подпрограммы синтаксис вызова:
subroutine( 参数列表 );
Perl 5.0 в следующих версиях вызова подпрограммы следующим образом:
&subroutine( 参数列表 );
В новой версии, хотя она поддерживает метод вызова, но не рекомендуется.
Далее мы рассмотрим простой пример:
#!/usr/bin/perl # 函数定义 sub Hello{ print "Hello, World!\n"; } # 函数调用 Hello();
Вышеприведенная программа, выход:
Hello, World!
Передача параметров в подпрограммах
подпрограмма Perl может принимать несколько параметров и других программ, использовать специальный массив @_ параметров подпрограмм, указанных.
Таким образом, подпрограмма первый аргумент $ _ [0], второй аргумент $ _ [1], и так далее.
Если параметры являются скалярными или массив типа, пользователь параметра, переданного в подпрограмму, Perl по умолчанию ссылкой называть их.
#!/usr/bin/perl # 定义求平均值函数 sub Average{ # 获取所有传入的参数 $n = scalar(@_); $sum = 0; foreach $item (@_){ $sum += $item; } $average = $sum / $n; print '传入的参数为 : ',"@_\n"; # 打印整个数组 print "第一个参数值为 : $_[0]\n"; # 打印第一个参数 print "传入参数的平均值为 : $average\n"; # 打印平均值 } # 调用函数 Average(10, 20, 30);
Вышеприведенная программа, выход:
传入的参数为 : 10 20 30 第一个参数值为 : 10 传入参数的平均值为 : 20
Пользователь может изменить значение соответствующих фактических параметров путем изменения значений в массиве @_.
Сдал в список подпрограмм
Поскольку @_ переменная является массивом, поэтому он может передать список в подпрограмму.
Но если мы должны передать скаляром и массив параметров, то вам нужно перечислить на последнем параметре, следующим образом:
#!/usr/bin/perl # 定义函数 sub PrintList{ my @list = @_; print "列表为 : @list\n"; } $a = 10; @b = (1, 2, 3, 4); # 列表参数 PrintList($a, @b);
Вышеприведенная программа объединит скаляр и массив выходных результатов:
列表为 : 10 1 2 3 4
Мы можем перейти к Подпрограммы нескольких массивов и хэшей, но если она передается несколько массивов и хэшей, приведет к потере независимой идентичности. Таким образом, мы должны использовать ссылку (в следующем разделе будет ввести), чтобы пройти.
Хэш-передается подпрограмме
Когда хеш-таблица передается в подпрограмму, то он будет скопирован в @_ в хэш-таблице будет расширить список пар ключ / значение.
#!/usr/bin/perl # 方法定义 sub PrintHash{ my (%hash) = @_; foreach my $key ( keys %hash ){ my $value = $hash{$key}; print "$key : $value\n"; } } %hash = ('name' => 'w3big', 'age' => 3); # 传递哈希 PrintHash(%hash);
Выход выше выполнение программы:
age : 3 name : w3big
Подпрограммы Возвращаемое значение
Подпрограмма может быть как и другие языки программирования используют оператор возврата для возврата значений.
Если нет возврата заявления, то в последней строке заявления подпрограммы в качестве возвращаемого значения.
#!/usr/bin/perl # 方法定义 sub add_a_b{ # 不使用 return $_[0]+$_[1]; # 使用 return # return $_[0]+$_[1]; } print add_a_b(1, 2)
Выход выше выполнение программы:
3
Подпрограммы мы можем вернуть скаляры, массивы и хэши, но взамен нескольких массивов и хэшей, приведет к потере независимой идентичности. Таким образом, мы должны использовать ссылку (в следующем разделе будет ввести) возвращать несколько массивы и функции.
Подпрограммы частные переменные
По умолчанию, Perl, все переменные являются глобальными переменными, что означает, что переменная может быть вызвана из любого места в программе.
Если нам нужно установить частные переменные, использоватьмой оператор , чтобы установить.
мой оператор создает лексически контекстные переменные, переменные , созданные с помощью моеговыживания место в начале заявления до конца рамки закрытия.
Область относится к закрытию может быть в области брекет пара может быть файл, может также быть, если, в то время как, для, Еогеасп, Eval строка.
В следующем примере показано, как объявить одну или несколько частных переменных:
sub somefunc { my $variable; # $variable 在方法 somefunc() 外不可见 my ($another, @an_array, %a_hash); # 同时声明多个变量 }
#!/usr/bin/perl # 全局变量 $string = "Hello, World!"; # 函数定义 sub PrintHello{ # PrintHello 函数的私有变量 my $string; $string = "Hello, w3big!"; print "函数内字符串:$string\n"; } # 调用函数 PrintHello(); print "函数外字符串:$string\n";
Выход выше выполнение программы:
函数内字符串:Hello, w3big! 函数外字符串:Hello, World!
Переменные временного назначения
Мы можем использовать локальные временные значения для глобальных переменных, объем исходного значения после выхода также обратно.
локальные переменные определены в основной программе не существует, но существуют в подпрограмме и вызова подпрограммы подпрограммы. При определении может придать ему значение, например:
#!/usr/bin/perl # 全局变量 $string = "Hello, World!"; sub Printw3big{ # PrintHello 函数私有变量 local $string; $string = "Hello, w3big!"; # 子程序调用的子程序 PrintMe(); print "Printw3big 函数内字符串值:$string\n"; } sub PrintMe{ print "PrintMe 函数内字符串值:$string\n"; } sub PrintHello{ print "PrintHello 函数内字符串值:$string\n"; } # 函数调用 Printw3big(); PrintHello(); print "函数外部字符串值:$string\n";
Выход выше выполнение программы:
PrintMe 函数内字符串值:Hello, w3big! Printw3big 函数内字符串值:Hello, w3big! PrintHello 函数内字符串值:Hello, World! 函数外部字符串值:Hello, World!
Статические переменные
Функция государственных операторов аналогична статическим модификатором языка C, государственные ключевые слова станут постоянными локальными переменными.
состояние также лексические переменные, только определение лексической переменной областью является действительным, например:
#!/usr/bin/perl use feature 'state'; sub PrintCount{ state $count = 0; # 初始化变量 print "counter 值为:$count\n"; $count++; } for (1..5){ PrintCount(); }
Выход выше выполнение программы:
counter 值为:0 counter 值为:1 counter 值为:2 counter 值为:3 counter 值为:4
Примечание 1: Государство может только создать замкнутую-контекстные переменные внутри подпрограммы.
Примечание 2: состояние вводится с Perl 5.9.4, он должен быть добавлен перед использованием, чтобы использовать.
Примечание 3: состояние может объявить скаляр, массив, хэш. Но при объявлении массивов и хэшей, вы не можете инициализировать его (по крайней мере, Perl 5.14 не поддерживается).
Контекст вызов подпрограммы
Подпрограммам, он вернется к значениям различных типов, в зависимости от контекста, например, следующий МестноеВремя () подпрограмма в скалярном контексте возвращает строку, в контексте списка возвращает список:
#!/usr/bin/perl # 标量上下文 my $datestring = localtime( time ); print $datestring; print "\n"; # 列表上下文 ($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time); printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec); print "\n";
Выход выше выполнение программы:
Sun Jun 12 15:58:09 2016 2106-6-12 15:58:9