⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 given.t

📁 source of perl for linux application,
💻 T
字号:
BEGIN {    if ($ENV{PERL_CORE}) {        chdir('t') if -d 't';        @INC = qw(../lib);    }}use Carp;use Switch qw(Perl6 __ fallthrough);my($C,$M);sub ok{$C++;$M.=$_[0]?"ok $C\n":"not ok $C (line ".(caller)[2].")\n"}END{print"1..$C\n$M"}# NON-when THINGS;$when->{when} = { when => "when" };*when = \&when;# PREMATURE wheneval { when 1 { ok(0) }; ok(0) } || ok(1);# H.O. FUNCSgiven __ > 2 {	when 1	{ ok(0) } else { ok(1) }	when 2	{ ok(0) } else { ok(1) }	when 3	{ ok(1) } else { ok(0) }}given (3) {	eval { when __ <= 1 || __ > 2	{ ok(0) } } || ok(1);	when __ <= 2 		{ ok(0) };	when __ <= 3		{ ok(1) };}# POSSIBLE ARGS: NUMERIC, STRING, ARRAY, HASH, REGEX, CODE# 1. NUMERIC SWITCHfor (1..3){	given ($_) {		# SELF		when ($_) { ok(1) } else { ok(0) }		# NUMERIC		when 1 { ok ($_==1) } else { ok($_!=1) }		when (1)  { ok ($_==1) } else { ok($_!=1) }		when 3 { ok ($_==3) } else { ok($_!=3) }		when (4) { ok (0) } else { ok(1) }		when (2) { ok ($_==2) } else { ok($_!=2) }		# STRING		when ('a') { ok (0) } else { ok(1) }		when  'a'  { ok (0) } else { ok(1) }		when ('3') { ok ($_ == 3) } else { ok($_ != 3) }		when ('3.0') { ok (0) } else { ok(1) }		# ARRAY		when ([10,5,1]) { ok ($_==1) } else { ok($_!=1) }		when  [10,5,1]  { ok ($_==1) } else { ok($_!=1) }		when (['a','b']) { ok (0) } else { ok(1) }		when (['a','b',3]) { ok ($_==3) } else { ok ($_!=3) }		when (['a','b',2.0])  { ok ($_==2) } else { ok ($_!=2) }		when ([])  { ok (0) } else { ok(1) }		# HASH		when ({})  { ok (0) } else { ok (1) }		when {}  { ok (0) } else { ok (1) }		when {1,1}  { ok ($_==1) } else { ok($_!=1) }		when ({1=>1, 2=>0})  { ok ($_==1) } else { ok($_!=1) }		# SUB/BLOCK		when (sub {$_[0]==2})  { ok ($_==2) } else { ok($_!=2) }		when {$_[0]==2}  { ok ($_==2) } else { ok($_!=2) }		when {0}  { ok (0) } else { ok (1) }	# ; -> SUB, NOT HASH		when {1}  { ok (1) } else { ok (0) }	# ; -> SUB, NOT HASH	}}# 2. STRING SWITCHfor ('a'..'c','1'){	given ($_) {		# SELF		when ($_)  { ok(1) } else { ok(0) }		# NUMERIC		when (1)   { ok ($_ !~ /[a-c]/) } else { ok ($_ =~ /[a-c]/) }		when (1.0)  { ok ($_ !~ /[a-c]/) } else { ok ($_ =~ /[a-c]/) }		# STRING		when ('a')  { ok ($_ eq 'a') } else { ok($_ ne 'a') }		when ('b')  { ok ($_ eq 'b') } else { ok($_ ne 'b') }		when ('c')  { ok ($_ eq 'c') } else { ok($_ ne 'c') }		when ('1')  { ok ($_ eq '1') } else { ok($_ ne '1') }		when ('d')  { ok (0) } else { ok (1) }		# ARRAY		when (['a','1'])  { ok ($_ eq 'a' || $_ eq '1') }			else { ok ($_ ne 'a' && $_ ne '1') }		when (['z','2'])  { ok (0) } else { ok(1) }		when ([])  { ok (0) } else { ok(1) }		# HASH		when ({})  { ok (0) } else { ok (1) }		when ({a=>'a', 1=>1, 2=>0})  { ok ($_ eq 'a' || $_ eq '1') }			else { ok ($_ ne 'a' && $_ ne '1') }		# SUB/BLOCK		when (sub{$_[0] eq 'a' })  { ok ($_ eq 'a') }			else { ok($_ ne 'a') }		when {$_[0] eq 'a'}  { ok ($_ eq 'a') } else { ok($_ ne 'a') }		when {0}  { ok (0) } else { ok (1) }	# ; -> SUB, NOT HASH		when {1}  { ok (1) } else { ok (0) }	# ; -> SUB, NOT HASH	}}# 3. ARRAY SWITCHmy $iteration = 0;for ([],[1,'a'],[2,'b']){	given ($_) {	$iteration++;		# SELF		when ($_)  { ok(1) }		# NUMERIC		when (1)  { ok ($iteration==2) } else { ok ($iteration!=2) }		when (1.0)  { ok ($iteration==2) } else { ok ($iteration!=2) }		# STRING		when ('a')  { ok ($iteration==2) } else { ok ($iteration!=2) }		when ('b')  { ok ($iteration==3) } else { ok ($iteration!=3) }		when ('1')  { ok ($iteration==2) } else { ok ($iteration!=2) }		# ARRAY		when (['a',2])  { ok ($iteration>=2) } else { ok ($iteration<2) }		when ([1,'a'])  { ok ($iteration==2) } else { ok($iteration!=2) }		when ([])  { ok (0) } else { ok(1) }		when ([7..100])  { ok (0) } else { ok(1) }		# HASH		when ({})  { ok (0) } else { ok (1) }		when ({a=>'a', 1=>1, 2=>0})  { ok ($iteration==2) }			else { ok ($iteration!=2) }		# SUB/BLOCK		when {scalar grep /a/, @_}  { ok ($iteration==2) }			else { ok ($iteration!=2) }		when (sub {scalar grep /a/, @_ })  { ok ($iteration==2) }			else { ok ($iteration!=2) }		when {0}  { ok (0) } else { ok (1) }	# ; -> SUB, NOT HASH		when {1}  { ok (1) } else { ok (0) }	# ; -> SUB, NOT HASH	}}# 4. HASH SWITCH$iteration = 0;for ({},{a=>1,b=>0}){	given ($_) {	$iteration++;		# SELF		when ($_)  { ok(1) } else { ok(0) }		# NUMERIC		when (1)  { ok (0) } else { ok (1) }		when (1.0)  { ok (0) } else { ok (1) }		# STRING		when ('a')  { ok ($iteration==2) } else { ok ($iteration!=2) }		when ('b')  { ok (0) } else { ok (1) }		when ('c')  { ok (0) } else { ok (1) }		# ARRAY		when (['a',2])  { ok ($iteration==2) }			else { ok ($iteration!=2) }		when (['b','a'])  { ok ($iteration==2) }			else { ok ($iteration!=2) }		when (['b','c'])  { ok (0) } else { ok (1) }		when ([])  { ok (0) } else { ok(1) }		when ([7..100])  { ok (0) } else { ok(1) }		# HASH		when ({})  { ok (0) } else { ok (1) }		when ({a=>'a', 1=>1, 2=>0})  { ok (0) } else { ok (1) }		# SUB/BLOCK		when {$_[0]{a}}  { ok ($iteration==2) }			else { ok ($iteration!=2) }		when (sub {$_[0]{a}})  { ok ($iteration==2) }			else { ok ($iteration!=2) }		when {0}  { ok (0) } else { ok (1) }	# ; -> SUB, NOT HASH		when {1}  { ok (1) } else { ok (0) }	# ; -> SUB, NOT HASH	}}# 5. CODE SWITCH$iteration = 0;for ( sub {1},      sub { return 0 unless @_;	    my ($data) = @_;	    my $type = ref $data;	    return $type eq 'HASH'   && $data->{a}		|| $type eq 'Regexp' && 'a' =~ /$data/		|| $type eq ""       && $data eq '1';	  },      sub {0} ){	given ($_) {	$iteration++;		# SELF		when ($_)  { ok(1) } else { ok(0) }		# NUMERIC		when (1)  { ok ($iteration<=2) } else { ok ($iteration>2) }		when (1.0)  { ok ($iteration<=2) } else { ok ($iteration>2) }		when (1.1)  { ok ($iteration==1) } else { ok ($iteration!=1) }		# STRING		when ('a')  { ok ($iteration==1) } else { ok ($iteration!=1) }		when ('b')  { ok ($iteration==1) } else { ok ($iteration!=1) }		when ('c')  { ok ($iteration==1) } else { ok ($iteration!=1) }		when ('1')  { ok ($iteration<=2) } else { ok ($iteration>2) }		# ARRAY		when ([1, 'a'])  { ok ($iteration<=2) }			else { ok ($iteration>2) }		when (['b','a'])  { ok ($iteration==1) }			else { ok ($iteration!=1) }		when (['b','c'])  { ok ($iteration==1) }			else { ok ($iteration!=1) }		when ([])  { ok ($iteration==1) } else { ok($iteration!=1) }		when ([7..100])  { ok ($iteration==1) }			else { ok($iteration!=1) }		# HASH		when ({})  { ok ($iteration==1) } else { ok ($iteration!=1) }		when ({a=>'a', 1=>1, 2=>0})  { ok ($iteration<=2) }			else { ok ($iteration>2) }		# SUB/BLOCK		when {$_[0]->{a}}  { ok (0) } else { ok (1) }		when (sub {$_[0]{a}})  { ok (0) } else { ok (1) }		when {0}  { ok (0) } else { ok (1) }	# ; -> SUB, NOT HASH		when {1}  { ok (0) } else { ok (1) }	# ; -> SUB, NOT HASH	}}# NESTED SWITCHESfor my $count (1..3){	given ([9,"a",11]) {		when (qr/\d/)  {				given ($count) {					when (1)      { ok($count==1) }						else { ok($count!=1) }					when ([5,6])  { ok(0) } else { ok(1) }				}			    }		ok(1) when 11;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -