$bitstring = pack "b*", join('', @bits);
print "$bitstring\n"; # "TC",和前面例子一样
unpack 可以用于从该位串中抽取这个 0 和 1 的列表:
@bits = split(//, unpack("b*", $bitstring));
print "@bits\n"; # 0 0 1 0 1 0 1 0 1 1 0 0 0 0 1 0
如果你知道位串的位的确切长度,那么这个长度可以用于“*”的位置。
参阅 select 获取使用 vec 生成的位图的其他的例子。参阅 pack 和 unpack 获取操作二进制数据的更高级别的方法。
wait
这个函数等待一个子进程退出并返回消失了的进程的 PID,或者如果没有子进程了就返回 -1(或者在一些系统里,子进程自动被收割也如此。)它在 $? 里返回的状态和在 system 里描述的一样。如果你有僵死子进程,那么你就应该调用这个函数,或者 waitpid。
如果你在等待一个子进程,但是用 wait 没有找到它,那么你可能就是调用了 system,关闭了一个管道,或者在 fork 和 wait 之间使用了反勾号。这些构造也做 wait(2) 并且因此可能收割你的子进程。使用 waitpid 避免这样的情况。
waitpid PID, FLAGS
这个函数等待特定的子进程结束并在该进程死亡之后返回其 PID,如果没有其他的子进程时返回 -1,或者 FLAGS 里的标志声明的是非阻塞状态而该进程尚未退出,则返回 0。死亡的进程返回的状态存储在 $?,并且和 system 里描述的一样。要获取有效的标志值,那么你必须输入“:sys_wait_h”从 POSIX 里输入标签组。下面是一个等待所有挂起的僵死进程的非阻塞的例子:
use POSIX ":sys_wait_h";
do {
$kid = waitpid(-1, &WNOHANG);
} until $kid == -1;
在那些既没有实现 waitpid(2) 也没有实现 wait4(2) 系统调用的平台上,你可以声明的 FLAGS 只有 0。换句话说,你在那里可以等待一个特定的 PID,但是你不能在非阻塞模式里做这些事情。
在一些系统里,返回值为 -1 意味着该子进程被自动收割了,因为你设置了 $SIG{CHLD} = 'IGNORE'。
wantarray
如果当前正在执行的子过程在寻找列表数值,那么此函数返回真,否则返回假。如果调用环境需要的是一个标量,那么该函数返回一个定义了的假(""),而如果调用环境并不需要任何东西,(也就是说,空环境)那么返回一个未定义的假值(undef);
下面是它的典型用法的例子:
return unless defined wantarray; # 不需要干什么事情 my @a = complex_calculation(); return wantaray ? @a : \@a;
又见 caller。这个函数真是应该命名为“wantlist”,但是我们是在列表环境还叫数组环境的时候命名它的。(译注:数组英文词是“array”,列表英文词是“list”。)
warn LIST
warn
这个函数生成一条错误信息,象 die 那样把 LIST 打印到 STDERR,但是并不试图退出或者抛出一个例外。比如:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28372-29.html
晚安#易烊千玺#
TEAMO
我的儿女们也会继续这样做