📄 func.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<title>Perl教程 附录一 函数集</title>
<LINK rel="stylesheet" href="article.css" type="text/css">
</head>
<body>
<br>
<p align="center">附录一 函数集(未定稿)</p>
<p align="center"><a target="_blank" href="http://flamephoenix.126.com">by flamephoenix</a></p>
<a href="#1">一、进程处理函数</a><br>
<a href="#1.1">1、进程启动函数</a><br>
<a href="#1.2">2、进程终止函数</a><br>
<a href="#1.3">3、进程控制函数</a><br>
<a href="#1.4">4、其它控制函数 </a><br>
<a href="#2">二、数学函数</a><br>
<a href="#3">三、字符串处理函数</a><br>
<a href="#4">四、标量转换函数</a><br>
<a href="#5">五、数组和列表函数</a><br>
<a href="#6">六、关联数组函数</a><br><br>
<a name="1">一、进程处理函数</a><br><br>
<a name="1.1">1、进程启动函数</a><br>
<p>
<table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>eval</td>
</tr>
<tr>
<td>调用语法</td>
<td>eval(string)</td>
</tr>
<tr>
<td>解说</td>
<td>将string看作Perl语句执行。<br>正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息。</td>
</tr>
<tr>
<td>例子</td>
<td>$print = "print (\"hello,world\\n\");";<br>eval ($print);</td>
</tr>
<tr>
<td>结果输出</td>
<td>hello, world</td>
</tr>
</table>
</p>
<p>
<table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>system</td>
</tr>
<tr>
<td>调用语法</td>
<td>system(list)</td>
</tr>
<tr>
<td>解说</td>
<td>list中第一个元素为程序名,其余为参数。<br>system启动一个进程运行程序并等待其结束,程序结束后错误代码左移八位成为返回值。</td>
</tr>
<tr>
<td>例子</td>
<td>@proglist = ("echo", "hello,world!");<br>system(@proglist);</td>
</tr>
<tr>
<td>结果输出</td>
<td>hello, world!</td>
</tr>
</table>
</p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>fork</td>
</tr>
<tr>
<td>调用语法</td>
<td>procid = fork();</td>
</tr>
<tr>
<td>解说</td>
<td>创建程序的两个拷贝--父进程和子进程--同时运行。子进程返回零,父进程返回非零值,此值为子程序的进程ID号。</td>
</tr>
<tr>
<td>例子</td>
<td>$retval = fork();<br>if ($retval == 0) {<br> # this is the child process<br> exit; # this terminates the child process<br>} else {<br> # this is the parent process<br>}</td>
</tr>
<tr>
<td>结果输出</td>
<td>无</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>pipe</td>
</tr>
<tr>
<td>调用语法</td>
<td>pipe (infile, outfile);</td>
</tr>
<tr>
<td>解说</td>
<td>与fork合用,给父进程和子进程提供通信的方式。送到outfile文件变量的信息可以通过infile文件变量读取。步骤:<br>1、调用pipe<br>2、用fork将程序分成父进程和子进程<br>3、一个进程关掉infile,另一个关掉outfile</td>
</tr>
<tr>
<td>例子</td>
<td>pipe (INPUT, OUTPUT);<br>$retval = fork();<br>if ($retval != 0) {<br> # this is the parent process <br> close (INPUT);<br> print ("Enter a line of input:\n");<br> $line = <STDIN>;<br> print OUTPUT ($line);<br>} else {<br> # this is the child process<br> close (OUTPUT);<br> $line = <INPUT>;<br> print ($line);<br> exit (0);<br>}<br></td>
</tr>
<tr>
<td>结果输出</td>
<td>$<br>program<br>Enter a line of input:<br>Here is a test line<br>Here is a test line<br>$</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>exec</td>
</tr>
<tr>
<td>调用语法</td>
<td>exec (list);</td>
</tr>
<tr>
<td>解说</td>
<td>与system类似,区别是启动新进程前结束当前程序。常与fork合用,当fork分成两个进程后,子进程用exec启动另一个程序。</td>
</tr>
<tr>
<td>例子</td>
<td>
</td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>syscall</td>
</tr>
<tr>
<td>调用语法</td>
<td>syscall (list);</td>
</tr>
<tr>
<td>解说</td>
<td>调用系统函数,list第一个元素是系统调用名,其余为参数。<br>如果参数是数字,就转化成C的整型数(type int)。否则传递字符串的指针。详见UNIX的帮助或Perl文档。<br>使用syscall必须包含文件syscall.pl,即:<br> require ("syscall.ph"); </td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<a name="1.2">2、进程终止函数<br><br>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>die</td>
</tr>
<tr>
<td>调用语法</td>
<td>die (message);</td>
</tr>
<tr>
<td>解说</td>
<td>终止程序并向STDERR输出错误信息。message可以为字符串或列表。如果最后一个参数不包含换行符,则程序文件名和行号也被输出。</td>
</tr>
<tr>
<td>例子</td>
<td>die ("Cannot open input file");</td>
</tr>
<tr>
<td>结果输出</td>
<td>Cannot open input file at myprog line 6.</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>warn</td>
</tr>
<tr>
<td>调用语法</td>
<td>warn (message);</td>
</tr>
<tr>
<td>解说</td>
<td>与die类似,区别是不终止程序。</td>
</tr>
<tr>
<td>例子</td>
<td>warn("Danger! Danger!\n");</td>
</tr>
<tr>
<td>结果输出</td>
<td>Danger! Danger!</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>exit</td>
</tr>
<tr>
<td>调用语法</td>
<td>exit (retcode);</td>
</tr>
<tr>
<td>解说</td>
<td>终止程序并指定返回值。</td>
</tr>
<tr>
<td>例子</td>
<td>exit(2);</td>
</tr>
<tr>
<td>结果输出</td>
<td>无</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>kill</td>
</tr>
<tr>
<td>调用语法</td>
<td>kill (signal, proclist);</td>
</tr>
<tr>
<td>解说</td>
<td>给一组进程发送信号。<br>signal是发送的数字信号,9为杀掉进程。<br>proclist是进程ID列表。详见kill的UNIX帮助。</td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<a name="1.3">3、进程控制函数</a><br>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>sleep</td>
</tr>
<tr>
<td>调用语法</td>
<td>sleep (time);</td>
</tr>
<tr>
<td>解说</td>
<td>将程序暂停一段时间。time是停止的秒数。返回值为实际停止的秒数。</td>
</tr>
<tr>
<td>例子</td>
<td>sleep (5);</td>
</tr>
<tr>
<td>结果输出</td>
<td>无</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>wait</td>
</tr>
<tr>
<td>调用语法</td>
<td>procid = wait();</td>
</tr>
<tr>
<td>解说</td>
<td>暂停程序执行,等待子进程终止。<br>不需要参数,返回值为子进程ID,如果没有子进程,返回-1。</td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>waitpid</td>
</tr>
<tr>
<td>调用语法</td>
<td>waitpid (procid, waitflag);</td>
</tr>
<tr>
<td>解说</td>
<td>暂停程序执行,等待特定的子进程终止。procid为等待的进程ID</td>
</tr>
<tr>
<td>例子</td>
<td>$procid = fork();<br>if ($procid == 0) {<br> # this is the child process<br> print ("this line is printed first\n");<br> exit(0);<br>} else {<br> # this is the parent process<br> waitpid ($procid, 0);<br> print ("this line is printed last\n");<br>}</td>
</tr>
<tr>
<td>结果输出</td>
<td>$ program<br>this line is printed first<br>this line is printed last<br>$</td>
</tr>
</table></p>
<a name="1.4">4、其它控制函数</a><br>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>caller</td>
</tr>
<tr>
<td>调用语法</td>
<td>subinfo = caller();</td>
</tr>
<tr>
<td>解说</td>
<td>返回调用者的程序名和行号,用于Perl Debugger。<br>返回值为三元素的列表:<br>1、调用处的包名<br>2、调用者文件名<br>3、调用处的行号</td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>chroot</td>
</tr>
<tr>
<td>调用语法</td>
<td>chroot (dir);</td>
</tr>
<tr>
<td>解说</td>
<td>改变程序的根目录,详见chroot帮助。</td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>local</td>
</tr>
<tr>
<td>调用语法</td>
<td>local($variable);</td>
</tr>
<tr>
<td>解说</td>
<td>在语句块(由大括号包围的语句集合)中定义局域变量,仅在此语句块中起作用,对其的改变不对块外同名变量造成影响。<br><b>千万不要在循环中使用,否则每次循环都定义一个新的局域变量!</b></td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>times</td>
</tr>
<tr>
<td>调用语法</td>
<td>timelist = times</td>
</tr>
<tr>
<td>解说</td>
<td>返回该程序及所有子进程消耗的工作时间。<br>返回值为四个浮点数的列表:<br>1、程序耗用的用户时间<br>2、程序耗用的系统时间<br>3、子进程耗用的用户时间<br>4、子进程耗用的系统时间</td>
</tr>
<tr>
<td>例子</td>
<td> </td>
</tr>
<tr>
<td>结果输出</td>
<td> </td>
</tr>
</table></p>
<a name="2">二、数学函数</a><br>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>sin</td>
</tr>
<tr>
<td>调用语法</td>
<td>retval = sin (value);</td>
</tr>
<tr>
<td>解说</td>
<td>参数为弧度值。</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>cos</td>
</tr>
<tr>
<td>调用语法</td>
<td>retval = cos (value);</td>
</tr>
<tr>
<td>解说</td>
<td>参数为弧度值。</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
<tr>
<td>函数名</td>
<td>atan2</td>
</tr>
<tr>
<td>调用语法</td>
<td>retval = atan2 (value1, value2);</td>
</tr>
<tr>
<td>解说</td>
<td>运算并返回value1除以value2结果的arctan值,单位为弧度,范围在-PI~PI。</td>
</tr>
<tr>
<td>应用例:<br>角度转化成弧度子程序。</td>
<td>sub degrees_to_radians {<br> local ($degrees) = @_;<br> local ($radians);11: <br> $radians = atan2(1,1) * $degrees / 45;<br>}</td>
</tr>
</table></p>
<p><table border="1" cellspacing="1">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -