setpriority WHICH, WHO, PRIORITY
这个函数为 WHICH 和 WHO 里声明的一个进程,进程组,或者一个用户设置当前 PRIORITY,参阅setpriority(2)。在那些没有实现 setpriority(2) 的机器上调用 setpriority 将抛出一个例外。要把你的程序“nice”下四个单位(和用 nice(1) 处理你的程序一样),用:
setpriority 0, 0, getpriority(0, 0) + 4;
一个给定的优先级的解释可能会因不同的系统而异。有些权限可能是那些非特权用户所不能使用的。
又见 CPAN 的 BSD::Resource 模块。
setsockopt SOCKET, LEVEL, OPTNAME, OPTVAL
这个函数设置你需要的套接字选项。出错时该函数返回 undef。LEVEL 表示你的调用瞄准的是哪一个协议层。或者就是 SOL_SOCKET,指向在所有层之上的套接字本身。如果你不想传递参数,那么可以把 OPTVAL 声明为 undef。在套接字上一个常用的选项是 SO_REUSEADDR,这样才能绕开因为前一个在该端口的 TCP 联接仍然认为固执地认为它在关闭的时候,我们不能绑定特定的地址的问题。它看起来象这样:
use Socket;
socket(SOCK, ...) or die "Can't make socket: $!\n";
setsocket(SOCK, SOL_SOCKET, SO_REUSEADDR, 1)
or warn "Can't do setdosockotp: $!\n";
参阅 setsockopt(2) 获取其他可能数值。
shift ARRAY
shift
这个函数把数组的第一个值移出并且返回它,然后把数组长度减一并且把所有的东西都顺移。如果在数组中不再存在元素,它返回 undef。
如果省略了 ARRAY,那么该函数在子过程和格式的词法范围里移动 @_;它在文件范围(通常是主程序)或者在由 eval STRING,BEGIN { },CHECK { },INIT { },和 END {} 这样的构造里面的词法范围里移动 @ARGV。
子过程通常以拷贝它们的参数到词法变量里开始,而 shift 可以用于这个目的:
sub marine {
my $fathoms = shift; # 深度
my $fishies = shift; # 鱼的数量
my $o2 = shift; # 氧气问题
# ...
}
shift 还可以用于在你的程序前面处理参数:
while (defined($_ = shift)) {
/^[^-]/ && do { unshift @ARGV, $_; last };
/^-w/ && do { $WARN = 1; next };
/^-r/ && do { $RECURSE = 1; next };
die "Unknown argument $_\n";
}
你还可以考虑使用 Getopt::Std 和 Getopt::Long 模块来处理程序参数。
又见 unshift,push,pop,和 splice。shift 和 unshift 函数在数组左边做的事情和 pop 和 push 在数组右边干的事情是一样的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28372-5.html
第一