perl: 函数和排序

函数(子程序):

Perl中的函数括号可以写也可以不写,除非不写影响含义。

自定义子程序:

sub    function-name{

expressions;

}

子程序的返回值:

所有perl子程序都有返回值,子程序中最后一个语句运算结果默认是程序的返回值。

return操作符会从子程序立即返回某个值。

子程序参数:

给子程序传参数只需要在调用子程序时在子程序后面加上圆括号和参数就可以了。

perl将参数列表存放在   @_   这个特殊数组变量中,子程序获取整个变量得到参数个数和参数值。

这个特殊的数组变量只在子程序执行期间有效。在子程序中使用$_[n]表示每个参数的值。

@_  是子程序的私有变量,每个子程序都有一个自己的@_。

子程序的私有参数:

Perl中默认的变量都是全局变量。

可以使用my操作符来创建私有的词法变量和数组(其实拥有列表的值)。

my    arg1, arg2;    #my只能私有一个变量arg1,arg2不会被私有化。

my  (arg1, arg2);    #使用括号可以同时私有括号内的变量。

私有变量和数组只在当前的块(子程序,控制流等)中有效。

词法变量不能保留变量的值。

建议所有参数的第一次出现都使用my

my ($arg1, $arg2, …);

($arg1, $arg2, …) = @_;

等效于:

my(arg1, arg2, …) = @_;      #直接创建私有变量并赋值。

长参数列表:

sub    function {

If (@_ != 2) {

Print “Warning!  The argument is wrong.\n”;

}

持久性私有变量:

使用my申明的词法变量不能保存变量的值,而且每次调用这个词法变量都可能被赋予不同的值。

使用state申明变量,这个变量还是私有变量,但是可以在子程序多次调用期间保留变量的值。

state   $arg/@arr;

调用子程序:

如果子程序的定义在调用之前可以写成可以像调用内置函数一样:

function    arg1, arg2;

建议所有子程序调用都使用&参数用括号:

&function(arg1, arg2, …);

如果自定义字函数和内置函数同名使用&调用的是自定义函数,不使用&调用的是内置函数。

--------------------------------------------------

排序子函数:

数字排序

sub   by_number {$a <=> $b}

my @result = sort   by_number @numbers;

等效于:

my @result = sort {$a<=> $b} @numbers;    #从小到大排序

my @result = reverse sort{$a<=> $b} @numbers;    #从大到小排序

my @result = sort{$b<=> $a} @numbers;    #从大到小排序

字符串排序

sub   ASCIIbeticaly {$a cmp $b }

sort    ASCIIbetically    @strings;

转换成小写字母排序

sub    case_insensitive { “\L$a” cmp “\L$b” }

sort    case_insensitive    @strings;

哈希值排序:

sub    by_value{ $hash{$b} <=>$hash{$a}}    #哈希的值从大到小排序。

my   @result = sort by_value keys %hash;

foreach   my  $keys   (@result){

print “$keys => $score{$keys}\n”;

}

sub   by_value_and_key{

$hash{$b} <=> $hash{$a}

or

$a cmp $b

}

my @result = sortby_value_and_key keys %hash;

时间: 2024-10-04 18:01:10

perl: 函数和排序的相关文章

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

Python的lambda函数与排序

Python的lambda函数与排序 2010-03-02 15:02 2809人阅读 评论(0) 收藏 举报 lambdapythonlistlispclass工作 目录(?)[+] 前几天看到了一行求1000的阶乘的Python代码: print    reduce ( lambda    x , y : x * y ,    range ( 1 ,    1001 )) 一下子被python代码的精简 与紧凑所折服,故对代码进行了简单的分析. reduce与range都是Python的内置

perl 函数返回hash引用

perl 函数返回hash引用 my %h=%{foo()} #接收hash sub foo{ my %fh; $fh{a}=1; return \%fh;      #返回hash引用 } grep?? 在hash中,当检验一个元素值是否被定义是用defined,当检验一个key在hash中是否存在时,用exists. if(defined $hash{$key}){...} if(exists $hash{$key}){...} 正则匹配时,=~之间不能有空格!!! 一个句柄可以多次使用,但

javascript函数2——排序

<!DOCTYPE html> <html> <head> <title>javascript排序</title> <meta charset="UTF-8"> <script type="text/javascript"> //根据数字进行函数的排序 function sortByNum(a,b){ return a-b; } var as = [1,2,"11"

Python3匿名函数字典排序、生成式与生成器、装饰器简介

1. 参数匿名函数字典排序 函数的参数: 参数类型:我们经常在看别人的代码中,经常出现def(*args,**kwargs)这样的表现形式; *args tuple(1,) **kwargs dict{"k" : "v"} fun(*args,**keargs) fun(1,2,3,4,5,a=10,b=40) 匿名函数: 匿名函数的定义:顾名思义就是没有名字的函数,那为什么要设立匿名函数,他有什么作用?lambda函数是一种快速付款定义机器智能单行的最小函数,可以

leetcode-179-Largest Number(理解规则,自定义cmp函数进行排序)

题目描述: 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数. 要完成的函数: string largestNumber(vector<int>& nums) 说明: 1.这道题给定一个vector,里面存放着int类型的非负整数,要求把这些非负整数拼起来,尽可能拼成一个最大的整数. 比如[

3203 数组做函数参数----排序函数--C语言版

3203: 数组做函数参数----排序函数--C语言版 时间限制: 1 Sec  内存限制: 128 MB提交: 253  解决: 151[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: void sort(int array[ ]);//该函数完成对array数组的排序工作 在以下程序的基础上,完成对sort函数的定义,提交时,只提交sort函数的定义即可. #include <stdio.h> void sort

3204: 数组做函数参数--排序函数2--C语言

3204: 数组做函数参数--排序函数2--C语言 时间限制: 1 Sec  内存限制: 128 MB提交: 211  解决: 143[提交][状态][讨论版][命题人:smallgyy] 题目描述 定义一个函数来完成对参数数组中元素的排序工作,函数声明如下: void sort(int array[ ],int n);//该函数完成对array数组的前n个元素的排序工作 在以下程序的基础上,完成对sort函数的定义,提交时,只提交sort函数的定义即可. #include <stdio.h >

go语言从例子开始之Example39.使用函数自定义排序

有时候我们想使用和集合的自然排序不同的方法对集合进行排序.例如,我们想按照字母的长度而不是首字母顺序对字符串排序.这里是一个 Go 自定义排序的例子. Example: package main import ( "fmt" "sort" ) //为了在 Go 中使用自定义函数进行排序, //我们需要一个对应的类型. //这里我们创建一个为内置 []string 类型的别名的byLength 类型, type byLength []string //我们在类型中实现