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

  免費注冊 查看新帖 |

Chinaunix

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

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

論壇徽章:
0
71 [報告]
發(fā)表于 2011-03-08 16:45 |只看該作者
本帖最后由 dl0622 于 2011-03-10 09:12 編輯

以下代碼在AIX5.3試跑通過:

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

sub myfunc {
    # $x = ...;

    if ( $x ) {
        return 1;
    } else {
        return;
    }
}
答:
sub myfunc {
$x==0?"":1;
}

2. $x=()結(jié)果是什么?列表位于標(biāo)量上下文是什么情況?()是不是用來創(chuàng)建空的list?請解釋原因。
答:$x=()結(jié)果是空;列表位于標(biāo)量上下文時返回最后一個元素;()是用來創(chuàng)建空的list。
原因:
在標(biāo)量環(huán)境里,列表中逗號操作符是一個兩目操作符,它會丟棄左邊的值并且返回右邊的值。逗號操作符的左邊實際上提供了一個空環(huán)境。
因為逗號操作符是左關(guān)聯(lián)的,如果你有一系列逗號分隔的數(shù)值,那你總是得到最后一個數(shù)值,
因為最后一個逗號會丟棄任何前面逗號生成的東西。

3. 1,2,3,5,6,7,8 如何合并成1-3,5-8?
答:
  1. #!/usr/bin/perl

  2. use strict;

  3. my @a=(1,2,3,5,6,7,8);
  4. my @b;

  5. for(0..$#a){
  6.     if(($_==0)||($_==$#a)){
  7.         push @b,$a[$_];
  8.     }
  9.     elsif($a[$_]+1 != $a[$_+1]){
  10.         push @b,(join ",",($a[$_],$a[$_+1]));
  11.     }
  12. }

  13. my $result=join "-",@b;
  14. print $result."\n";
復(fù)制代碼
4.@x=(5,7,9); $x[1]與@x[1]的區(qū)別是什么?
答:$x[1]與@x[1]基本無區(qū)別;$[$a]與@[$a]則有可能存在區(qū)別,例如當(dāng)$a=0..2 時。


5. 用最短和優(yōu)的perl代碼對當(dāng)前目錄下的文件和子目錄按修改時間進(jìn)行排序。
答:
  1. #!/usr/bin/perl

  2. use strict;

  3. opendir(THISDIR, ".") or die $!;
  4. my @allfiles = grep { $_ ne '.' and $_ ne '..' } readdir THISDIR;
  5. my %h;
  6. foreach(@allfiles){
  7.     $h{(stat "./$_")[9]} = $_;
  8. }
  9. foreach(sort keys %h){
  10.     print "$h{$_}\n";
  11. }
復(fù)制代碼
6.傳入一串?dāng)?shù)字并返回所有大于平均值的數(shù)字。
答:
  1. #!/usr/bin/perl

  2. use strict;

  3. my @a=(1,2,3,5,6,7,8);
  4. my $b;

  5. for(0..$#a){
  6.     $b+=$a[$_];
  7. }

  8. my $num=@a;
  9. my $avg=$b/$num;

  10. for(@a){
  11.     if($_>$avg){
  12.         print "$_\n";
  13.     }
  14. }
復(fù)制代碼
7.讓用戶不斷猜測范圍從1到100的秘密數(shù)字,直到猜中為止。程序應(yīng)該以魔術(shù)公式int(1+rand 100)來隨機(jī)產(chǎn)生秘密數(shù)字。
當(dāng)用戶猜錯時,程序應(yīng)相應(yīng)“too high”或者“too low”。如果用戶quit或者exit或者鍵入一個空白行程序就中止。
當(dāng)然如果用戶猜到了,程序也應(yīng)該中止。
答:
  1. #!/usr/bin/perl

  2. use strict;

  3. my $rand_num=int(1+rand 100);
  4. while(1){
  5.         print"please enter a number which is between 1 and 100:\n";
  6.         my $in=<STDIN>;
  7.         if(($in=~/\bquit\b/)||($in=~/\bexit\b/)||($in=~/^\s+/)){
  8.                 exit;
  9.         }
  10.         elsif($in>100||$in<0){
  11.                 print"you enter a number which is not between 1 and 100,please check!\n";
  12.                 next;
  13.         }
  14.         elsif($in > $rand_num){
  15.                 print"too high\n";
  16.                 next;
  17.         }
  18.         elsif($in < $rand_num){
  19.                 print"too low\n";
  20.                 next;
  21.         }
  22.         elsif($in == $rand_num){
  23.                 print"bingo!\n";
  24.                 exit;
  25.         }
  26.         else{
  27.                 print"unknow error!\n";
  28.                 next;
  29.         }
  30. }
復(fù)制代碼
8. 寫一個簡單的TCP Echo Server,在linux/unix環(huán)境運行,偵聽在特定端口,接受用戶的網(wǎng)絡(luò)輸入,并返回同樣的數(shù)據(jù)給對方,
能接受quit命令。
基本要求:
(1)無阻塞IO。
(2)daemon方式運行。
(3)能接受kill -HUP重啟信號。

論壇徽章:
1
申猴
日期:2014-04-18 16:29:14
72 [報告]
發(fā)表于 2011-03-08 17:25 |只看該作者
好久沒寫perl了,好像不提倡寫for(;;)這種格式的
第一題:
        sub myfunc
        {
                $x?return 1:return;
        }
第二題:
        $x引用的列表首地址,清空該列表
第三題:
        my $i=0,$begin;
        @x=(1,2,3,5,6,7,;
        while($i<$#x+1)
        {
                for($begin=$x[$i];$x[$i]+1==$x[$i+1];$i++){}
                print $begin."-".$x[$i].",";
                $i++;
        }
第四題:
        $x[1]:列表的第二個元素;
        @x[1]:多重列表內(nèi)第二個列表元素的首地址(引用);
第五題:
        system(ls -lt .);
第六題:
my $i=0,$sum=0,$agv=0;
if(!@ARGV)
{
        eval (print "error,please input numbers";
}
for(;$i<=$#ARGV+1;$i++)
{
        $sum+=$ARGV[$i];
}
$agv=$sum/($#ARGV+1);
for($i=0;$i<=$#ARGV+1;$i++)
{
        if($ARGV[$i]>$agv)
        {
                print $ARGV[$i].",";
        }
}

論壇徽章:
0
73 [報告]
發(fā)表于 2011-03-09 16:01 |只看該作者
==>>>01 =====================================
sub myfun
{
  #x=...;
  $x?1:undef;
}

論壇徽章:
0
74 [報告]
發(fā)表于 2011-03-09 16:10 |只看該作者
==>>>02 =====================================
1 $x=()結(jié)果是什么?
$x=();的結(jié)果和$x;一樣,都是undef;

2 列表位于標(biāo)量上下文是什么情況?
例如=>$x=(1,2,3);
$x的值為3,()返回列表最后一個值。

3 ()是不是用來創(chuàng)建空的list?
不是的,這樣的賦值相當(dāng)于未定義。況且還可以定義空散列哩。

論壇徽章:
0
75 [報告]
發(fā)表于 2011-03-09 16:55 |只看該作者
==>>>04 =====================================
#!/bin/perl -w

srand();
$theNum=int(1 + rand(100));
while(1)
{
        print STDOUT "Please input your number : ";
  $myGuess = <STDIN>;
  chomp($myGuess);
  
  if ($myGuess =~/\D{1,}/)
  {
          last if("exit" == "$myGuess" or "quit" == "$myGuess");
          print STDOUT "Not number...\n";
          redo;
  }
  else
  {
          if ($myGuess gt $theNum)
    {
      print STDOUT "too high...\n";
      next;
    }
    elsif ($myGuess lt $theNum)
    {
      print STDOUT "too low...\n";
      next;
    }
    else
    {
      print STDOUT "correct...\n";
      last;
    }
  }
}

論壇徽章:
0
76 [報告]
發(fā)表于 2011-03-09 16:58 |只看該作者
:wink::wink:加油。!

論壇徽章:
0
77 [報告]
發(fā)表于 2011-03-14 10:21 |只看該作者
學(xué)C的飄過

論壇徽章:
0
78 [報告]
發(fā)表于 2011-03-15 21:33 |只看該作者
獎品比c/c++的豐厚呢,大家趕緊啊,多勞多得,哈哈

論壇徽章:
0
79 [報告]
發(fā)表于 2011-03-16 09:22 |只看該作者
看代碼學(xué)習(xí)中

論壇徽章:
0
80 [報告]
發(fā)表于 2011-03-16 16:22 |只看該作者
今天才看到帖子,晚了點。純屬參與,不求得獎

1.
sub myfunc{
....
1 if $x
}


2. 結(jié)果是空
有一點點不同時。perl里面分為匿名數(shù)組和賦值數(shù)組(不知道怎么叫)
$a = (1,2,3,6) 這種叫匿名數(shù)組,標(biāo)量環(huán)境相當(dāng)于逗號分隔, 取最后一個值,即 $a = 6
@a = (1,2,3,6) 這種叫賦值數(shù)組, $b = @a 這種在標(biāo)量環(huán)境下,取數(shù)組長度。 即 4

3. 不懂題意。是什么規(guī)則這么合并?
  前三個數(shù)合并,后4個數(shù)合并? 假如有第8,9,10個數(shù)字,那怎么辦?
  還是連續(xù)的數(shù)字合并?
  在題意不明確情況下,有一位朋友的算法最簡單。就是直接賦值。
  $string = "1-3,5-8";

4. 使用過程中沒什么區(qū)別, @a[1] 是Perl5之前的用法。后來改為 $a[1] 這樣,但是現(xiàn)在也兼容這么用。
    嚴(yán)格來說, @a[1] 是一個數(shù)組的片段(還是數(shù)組),但是只有一個元素。 $a[1] 是一個標(biāo)量。

5.
sort {-M $a <=> -M $b}  <*> ;

6.
myfunc(1,2,3,4,5,6,1,8,3,6,1);
sub myfunc{
  my @numbers = @_;
  my $max;
  foreach (@numbers){$max+=$_;}
  foreach (@numbers){push(@result,$_) if ($_>$max/@numbers);}
  return @result;
}

7.

$number = int(1+rand(100));
while (my $input = <STDIN>){
chomp $input;
if ($input =~ /^(exit|quit|)$/){print "Exit\n";exit;}
elsif ($input > $number){print "too high\n";}
elsif ($input < $number){print "too low\n";}
else{print "Got it\n";exit;}

}


8.
這個是我以前的代碼,少做修改
#!/usr/bin/perl

use strict;
use IO::Socket;
$|=1; # 關(guān)閉輸出緩沖

my %cfg = (
        server_port => 8080,
        client_timeout => 10,
);
my $program_exit = 0;
main();
exit;
##########################
#主程序
##########################
sub main
{
        $SIG{CHLD} = $SIG{INT} = $SIG{TERM} = sub{$program_exit++;};

        #創(chuàng)建Socket監(jiān)聽連接
        my $listen_socket = IO::Socket::INET->new(
                LocalPort       =>"$cfg{server_port}",
                Listen          =>20,
                Proto           =>'TCP',
                Reuse           =>1,
                Timeout         =>$cfg{client_timeout},
        ) or die $!;

        print "程序啟動,正在監(jiān)聽 $cfg{server_port} 端口 \n";

        #監(jiān)聽
        while (!$program_exit)
        {
                my $connection = $listen_socket->accept;
                next if (!$connection);
                if (fork() == 0){process($connection);}
                close($connection);
        }
        exit 0;

}
sub process
{
        my $connection = shift;
        $connection->autoflush(1);
        my $url;
        while (!$program_exit)
        {
                my $data = $connection->getline();
                chomp $data;
                if ($data =~ /^\s*quit\s*$/){last;}
                print $connection $data."\n";
        }
        $connection->shutdown(2);
}
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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