亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: 無風之谷
打印 上一主題 下一主題

ChinaUnix技術(shù)實踐之三——Perl編程大賽 [復(fù)制鏈接]

論壇徽章:
0
61 [報告]
發(fā)表于 2011-03-02 19:11 |只看該作者
第2題:結(jié)果是undef。列表位于標量上下文返回最后一個元素。()可以用來創(chuàng)建一個空列表,也常用來清空一個列表。

第4題:$x[1]和@x[1]的結(jié)果相同,都是7。前者都知道是數(shù)組中元素的表示方法。但后者這種寫法沒見過,感覺應(yīng)該是之前版本的寫法?

論壇徽章:
0
62 [報告]
發(fā)表于 2011-03-02 23:19 |只看該作者
#1
  1. sub myfunc {
  2.     # $x = ...;
  3.     $x ? 1 : undef;
  4. }
復(fù)制代碼
#2
1. $x = ()的結(jié)果是undef

2.列表在標量上下文返回其中最后一個變量或直接量在標量上下文的返回值。好像很繞口,解釋一下。
主要是列表中若有數(shù)組或哈希作為它的元素的問題,在標量上下文,列表中若有數(shù)組或哈希,該數(shù)組或哈希不會平坦化,而是當成單個的元素。若處在列表最后一個元素的位置,就返回該數(shù)組或哈希在標量上下文的返回值(數(shù)組為元素個數(shù),哈希為0或3/8這樣的鍵/桶值)
所以@array = qw/a b c/; $s = (1,2,@array);這樣返回的是3(@array的元素個數(shù)),而不是c。所以嚴格點說,返回的是最后一個元素的標量值,而不是最后一個元素。
把列表放到標量上下文去通常不是good practice,因為這相當于我費半天勁寫了前面的元素,最后只要最后一個元素的標量值,如果use warnings了,會出現(xiàn)void context的警告

3. ()如果是在列表上下文,比如@a = ();那么它就是為了創(chuàng)建空列表或者空哈希%h = ()。如果是在標量上下文,不是純粹為了玩兒的話,它的目的應(yīng)該是為了強制給予列表上下文。比如說
  1. @a = qw/a b/;
  2. @b = qw/1 2 3 4/;
  3. @c = qw/d e f/;
  4. $s = (@a, @b, @c);
  5. print $s; # 得到3,即列表最后元素@c在標量上下文的值
復(fù)制代碼
如果倒數(shù)第二行改成
  1. $s = () = (@a, @b, @c);
  2. print $s; # 得到9
復(fù)制代碼
中間的()實際相當于給了后面的列表一個列表上下文,讓它把@a、@b、@c都攤開,賦值給一個匿名數(shù)組,并立刻將這個匿名數(shù)組在標量上下文的值返回給$s(9就是@a、@b、@c全部元素的值)
另以splice舉例,In list context, returns the elements removed from the array. In scalar context, returns the last element removed.
如果我想得到的既不是移除的元素數(shù)組,也不是最后一個元素,而是它移除的元素個數(shù)
笨的方法是先用一個臨時數(shù)組接移除的元素,再把這個臨時數(shù)組賦值給標量
  1. @foo = splice @array, 3;
  2. $count = @foo;
復(fù)制代碼
但實際只要一行,不用引入新變量即可達到目的
  1. $count = () = splice @array, 3;
復(fù)制代碼
#3
(1..3,5..

#4
$x[1]是@x的第二個元素
@x[1]是@x的第二個元素構(gòu)成的一個單元素數(shù)組切片

#5
  1. @sorted = sort { -M($a) <=> -M($b) } glob "*";
復(fù)制代碼
#6
  1. $sum += $_ foreach @nums;
  2. $average = $sum / @num;
  3. @above_average = grep {$_ > $average } @nums;
復(fù)制代碼
#7
  1. my $secret_num = int(1 + rand 100);
  2. while (1) {
  3.     print "please input num('quit' or 'exit' to quit): ";
  4.     my $get_num = <STDIN>;
  5.     last if $get_num =~ /quit|exit|^\s*$/i;
  6.     $result = $get_num <=> $secret_num;
  7.     if ($result == 0) {
  8.         print "yes!";
  9.         last;
  10.     }
  11.     elsif ($result == -1) {
  12.         print "too low\n";
  13.     }
  14.     else {
  15.         print "too high\n";
  16.     }
  17. }
復(fù)制代碼
#8
完全不會,沒這需求...

論壇徽章:
0
63 [報告]
發(fā)表于 2011-03-02 23:46 |只看該作者
第三題會錯意了,重寫
  1. @num = (1,2,3,5,6,7,8,12,14,15,16,17,18,20);
  2. @string = @num;
  3. foreach (0..$#num) {
  4.     if ( ($num[$_] == $num[$_-1]+1) and ($num[$_] == $num[$_+1]-1) ) {
  5.         $string[$_] = "-";
  6.     }
  7. }
  8. $str = join ",", @string;
  9. $str =~ s/,(-,)+/-/g;
  10. print $str;
復(fù)制代碼

論壇徽章:
0
64 [報告]
發(fā)表于 2011-03-03 19:22 |只看該作者
{:3_191:}好久沒有寫了,生疏了:


  1. 第一題:sub myfunc {
  2.     # $x = ...;

  3.     if ( $x ) {
  4.         return 1;
  5.     } else {
  6.         return;
  7.     }
  8. }
  9. 答:精簡為:
  10. sub myfunc{
  11.     $x?return 1:return;
  12. }


  13. 第二題:
  14. $x=()結(jié)果是什么?列表位于標量上下文是什么情況?()是不是用來創(chuàng)建空的list?請解釋原因。
  15. 答:
  16. $x=()設(shè)置為undef,這句可以清空$x中存放的引用值、對象等等,一般用來釋放
  17. 列表位于標量上下文返回是元素個數(shù)
  18. ()可以用來創(chuàng)建空的list, ((),(),())=()



  19. 第三題:1,2,3,5,6,7,8 如何合并成1-3,5-8?
  20. 答:
  21. my @array=(1,2,3,5,6,7,8);
  22. my $head=shift @array;
  23. my $mid=$head;
  24. my @resume;
  25. while (@array){
  26.     my $x=shift @array;
  27.     if ($x-1==$mid){
  28.          $mid=$x;
  29.      }else{
  30.         push @resume,$head."-".$mid;
  31.         $head=$x;
  32.         $mid=shift @array;
  33.     }
  34.          push @resume,$head."-".$x  unless (@array);
  35. }
  36.   print join(",", @resume);

  37.    
  38. 第四題:@x=(5,7,9); $x[1]與@x[1]的區(qū)別是什么?
  39. 答:
  40. $x[1]是指 @x數(shù)組中第二個元素,返回是一個值
  41. @x[1]是包含數(shù)組片段  $x[1]的數(shù)組,返回的是個數(shù)組



  42. 第五題: 用最短和優(yōu)的perl代碼對當前目錄下的文件和子目錄按修改時間進行排序。

  43. print join "\n", ( sort {(-M $a)<=>(-M $b)} grep{ $_ ne ".."} (glob("*"),glob(".?*")));


  44. 第六題  傳入一串數(shù)字并返回所有大于平均值的數(shù)字。
  45. 答:
  46. my @k=split ",",shift;
  47. my $resume;
  48. my $n=0;
  49. foreach my $i(@k){
  50.     $n++;
  51.     $resume=$resume+$i;
  52. }
  53. $resume=$resume/$n;
  54. my @rr=grep { $_ >$resume} @k;
  55. print Dumper \@rr;


  56. 第七題:
  57. 答:
  58. my ($k,$i);
  59. print "please input the number:";
  60. while  ($i=<STDIN>){

  61.     chomp $i;
  62.     $k=int(1+rand 100);
  63.     print "the randam is $k \n";
  64.     exit  if ($i eq "quit") or ($i eq "exit") or ($i =~/^\s+$/);
  65.     next  if ($i !~/\d+/);
  66.      $i>$k? print "too high\n": print "too low\n";
  67.     print "right, you are hero~\n";exit if $i== $k;
  68.     next;
  69. }
復(fù)制代碼

論壇徽章:
0
65 [報告]
發(fā)表于 2011-03-03 19:22 |只看該作者
本帖最后由 chenzq1604 于 2011-03-17 00:52 編輯

第八題


  1. use strict;
  2. use POE qw{
  3. Component::Server::TCP
  4. };

  5. use constant PORT        => 7777;

  6. main();

  7. our %Sessions;

  8. sub main {

  9.    go_daemon();
  10.    start();
  11.    POE::Kernel->run();
  12.    exit(0);
  13. }

  14. sub start {
  15.    POE::Session->create(
  16.        inline_states => {
  17.        start => \&go_start,
  18.        hup_sig => \&go_hup,
  19.        }
  20.    );

  21.    POE::Component::Server::TCP->new(
  22.        Alias              => 'daemon',
  23.        Address            => "localhost",
  24.        Port               => PORT,
  25.        ClientInput        => \&client_input,
  26.        },
  27.    );
  28. }
  29. sub go_hup {
  30.   $_[HEAP]->{stop}='HUP';
  31.   $_[KERNEL]->sig_handled();
  32.    go_stop();
  33.    go_start();
  34. }

  35. sub go_start {
  36.      $_[KERNEL]->alias_set('daemon');
  37.      $_[KERNEL]->sig( HUP => 'sig_HUP');
  38. }


  39. sub go_stop {
  40.    my ($kernel, $heap, $sender) = @_[ KERNEL, HEAP, ARG0 ];
  41.    if ($heap->{stop_client_handler}) {
  42.        $kernel->post($heap->{stop_client_handler}, 'response', 'OK:stop')
  43.          if ref($heap->{stop_client_handler});
  44.        delete $heap->{stop_client_handler};
  45.    } else {
  46.        $heap->{stop_client_handler} = $sender || 1;
  47.        stop_module($kernel);
  48.        $heap->{check_result} = 'stop';
  49.    }
  50. }

  51. sub restart {
  52.    my ($kernel, $heap, $sender) =
  53.      @_[ KERNEL, HEAP, ARG0 ];
  54.    if ($heap->{restart_client_handler}) {
  55.        $kernel->post($heap->{restart_client_handler}, 'response', 'OK:restart')
  56.          if ref($heap->{restart_client_handler});
  57.        delete $heap->{restart_client_handler};
  58.    } else {
  59.        $heap->{restart_client_handler} = $sender || 1;
  60.        stop_module($kernel);
  61.        $heap->{check_result} = 'restart';
  62.    }
  63. }


  64. sub stop_module {
  65.    my $kernel = $_[0];
  66.    for my $s (keys %Sessions) {
  67.        $kernel->signal($s, 'TERM');
  68.    }

  69. }



  70. sub go_daemon {
  71.    my $child = fork;
  72.    die "Can't fork: $!" unless defined($child);
  73.    exit(0) if $child;
  74.    POSIX::setsid();
  75.    open(STDIN,  "</dev/null");
  76.    open(STDOUT, ">/dev/null");
  77.    open(STDERR, '>&STDOUT');
  78.    umask(0);
  79. }


  80. sub client_input {
  81.     my ( $heap, $input ) = @_[ HEAP, ARG0 ];
  82.     $heap->{client}->put($input);
  83.     if ($input eq "quit"){
  84.    $_[KERNEL]->yield("shutdown");
  85.     return;
  86.     }
  87. }

復(fù)制代碼

論壇徽章:
0
66 [報告]
發(fā)表于 2011-03-04 15:24 |只看該作者

  1. 第1題
  2. !!x
復(fù)制代碼

論壇徽章:
0
67 [報告]
發(fā)表于 2011-03-08 10:04 |只看該作者
perl 第五版白看了,一體都答不上來。

論壇徽章:
0
68 [報告]
發(fā)表于 2011-03-08 14:59 |只看該作者
1

1. 請正確的精簡如下代碼。

sub myfunc {
    $x?$x:'';
}

論壇徽章:
0
69 [報告]
發(fā)表于 2011-03-08 15:01 |只看該作者
2.
undef

論壇徽章:
0
70 [報告]
發(fā)表于 2011-03-08 15:03 |只看該作者
2.
undef
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP