📄 childerror.pm
字号:
# The source files are wholly original Motorola proprietary work now being # licensed as BSD, the following Copyright Notice will be added to each source # code file, documentation and other materials with the distribution:# # Copyright 2006, Motorola, All Rights Reserved.# # This program is licensed under a BSD license with the following terms:# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met:## - Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. ## - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. ## - Neither the name of the MOTOROLA nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission.### THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE.#package ChildError;use strict;use overload '""' => \&stringify, '0+' => \&numeric, bool => \&bool, fallback => 1;my @Sig_Name;sub import { my $class = shift; my $sym = join('::',scalar(caller),shift || 'CHILD_ERROR'); tie(my $var,__PACKAGE__); no strict 'refs'; *{$sym} = \$var;}sub new { my $this = shift; my $class = ref($this) || $this; my $n = @_ ? shift : $?; my $self = { val => $n }; unless ($self->{exit} = ($n >> 8) & 0xFF) { @$self{qw(sig core)} = ($n & 0x7F,($n & 0x80) ? 1 : 0); } if ($self->{exit} == 0x7F) { $self->{err} = 'No such file or directory'; } elsif ($self->{exit} == 0x7E) { $self->{err} = 'Permission denied'; } elsif ($self->{exit} == 0x02) { $self->{err} = 'Syntax error'; } bless($self,$class);}sub shell { my ($self,$exit) = @_; $exit &= 0xFF; if ($exit > 0x80) { $exit ^= 0x80; } else { $exit <<= 8; } $self->new($exit);}sub system { my ($self,$exit) = @_; my $obj = $self->new($exit); $obj->{str} = "system: $!" if ($exit == -1); $obj;}sub stringify { my $self = shift; unless ($self->{str}) { my $str; if ($self->{sig} && !$self->{exit}) { unless (@Sig_Name) { require Config; @Sig_Name[split(' ',$Config::Config{sig_num})] = split(' ',$Config::Config{sig_name}); } $str = "signal($self->{sig}) - ".($Sig_Name[$self->{sig}] || '?'); $str .= ' (core dumped)' if $self->{core}; } else { $str = "exit($self->{exit})"; $str .= " - $self->{err}" if $self->{err}; } $self->{str} = $str; } $self->{str};}sub numeric { int(shift->{val}) }sub bool { shift->numeric != 0 }*TIESCALAR = *FETCH = sub { shift->new };sub STORE { $? = $_[1]; $_[0] = $_[0]->new }1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -