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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
打印 上一主題 下一主題

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

論壇徽章:
0
21 [報(bào)告]
發(fā)表于 2011-02-25 12:00 |只看該作者
本帖最后由 strike2000mr 于 2011-02-26 16:00 編輯

3.把1,2,3,5,6,7,8 當(dāng)成是字符串也行吧,有正則表達(dá)式不是很快嘛
#!/usr/bin/perl
my $string=q/1,2,3,5,6,7,8/;
string=~s/,2,|,6,7,/-/g;
print $string;
,(\d+,)+
filename:test
  1. #!/usr/bin/perl
  2. my $string=join ",",@ARGV;
  3. foreach $_(@ARGV){
  4.              my $var=$_+1;
  5.              $string=~s/($_),($var)/$_ $var/;
  6. }
  7. $string=~s/ (\d+ )+/-/g;
  8. print $string;
復(fù)制代碼
#perl test 1 2 3 5 6 7 8

論壇徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亞洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辭舊歲徽章
日期:2015-03-03 16:54:152015亞冠之吉達(dá)阿赫利
日期:2015-06-02 11:34:112015亞冠之武里南聯(lián)
日期:2015-06-24 12:13:082015亞冠之阿爾納斯?fàn)?日期:2015-08-03 09:08:25
22 [報(bào)告]
發(fā)表于 2011-02-25 12:16 |只看該作者
回復(fù) 21# strike2000mr

那你還不如:

  1. my $string = "1,2,3,5,6,7,8";
  2. $string = "1-3,5-8";
  3. print $string;
復(fù)制代碼
純個(gè)人觀點(diǎn),不同意的也沒關(guān)系,哈哈,我覺得寫程序關(guān)鍵是要培養(yǎng)一種思維方式和習(xí)慣。要知道為什么要寫程序,這樣的程序方不方便擴(kuò)展,普適性,等等。

論壇徽章:
59
2015七夕節(jié)徽章
日期:2015-08-24 11:17:25ChinaUnix專家徽章
日期:2015-07-20 09:19:30每周論壇發(fā)貼之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38榮譽(yù)版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年紀(jì)念徽章
日期:2015-07-20 11:05:27IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-07-20 11:05:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:36程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:40數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:432015年辭舊歲徽章
日期:2015-07-20 11:05:44
23 [報(bào)告]
發(fā)表于 2011-02-25 12:18 |只看該作者
都是高手啊。看來(lái)“破”語(yǔ)言我鎮(zhèn)的不太會(huì)啊。周末在家查查資料正正。

論壇徽章:
0
24 [報(bào)告]
發(fā)表于 2011-02-25 14:27 |只看該作者
你們都把題公布出來(lái)了 要求不是要發(fā)郵件的么 破壞比賽規(guī)則嘛 呵呵

論壇徽章:
46
15-16賽季CBA聯(lián)賽之四川
日期:2018-03-27 11:59:132015年亞洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49雙魚座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亞冠之布里斯班獅吼
日期:2015-07-13 10:44:56
25 [報(bào)告]
發(fā)表于 2011-02-25 14:57 |只看該作者
本帖最后由 zhlong8 于 2011-02-25 15:24 編輯

#1
sub myfunc { $x ? 1 : return}

#2
# 經(jīng)測(cè)試 $x=() 結(jié)果是 undef
# 列表位于標(biāo)量上下文結(jié)果是列表中元素?cái)?shù)目
# () 是用來(lái)創(chuàng)建空列表的
# 此處結(jié)果為 undef 是編譯器的選擇,因?yàn)檫@里可以有多種解釋

#4
# $x[1] 為取數(shù)組 @x 的第 1 個(gè)元素(從0開始)
# @x[1] 為 slice 返回的是個(gè)列表

#3
  1. #!/usr/bin/perl -w

  2. use 5.012;

  3. my $s = $ARGV[0];
  4. $s =~ s/\s//g;

  5. while ($s =~ s/(?<=\d)  # a-b,c '-'只能出現(xiàn)在數(shù)字后面
  6.     -(\d+),             # 捕獲 b
  7.     ((??{$1+1}))        # 判斷 c 是否等于 b+1
  8.     (?=,|$)             # c 后面只能是字符串結(jié)束或 ','
  9.     /-$2/x or
  10.     $s =~ s/(?|^(\d++), # a,b 結(jié)構(gòu)只能出現(xiàn)在字符串首部或者 a 在 ',' 后
  11.     ((??{$1+1}))        # 判斷 b 是否等于 a + 1
  12.     |(?<=,)             # a 在 , 后的情況
  13.     (\d++),((??{$1+1})))
  14.     (?=,|$)             # b 后面只能是字符串結(jié)束或 , 防止 b 捕獲位數(shù)不全
  15.     /$1-$2/x
  16. ) {
  17.     say $s;
  18. }
  19. say "result: $s";
復(fù)制代碼
#5
  1. #!/usr/bin/perl -w

  2. use 5.012;
  3. use Cwd;
  4. use Data::Dumper;

  5. my @mtime;
  6. for (glob cwd . '/*') {
  7.     push @mtime, [$_, (stat)[9]];
  8. }

  9. @mtime = sort {$a->[1] <=> $b->[1]} @mtime;

  10. print Dumper \@mtime;
復(fù)制代碼
#7
  1. #!/usr/bin/perl -w

  2. use 5.012;

  3. my $secret = int (1+rand 100);

  4. print "guess a integer from 1 to 100\n> ";

  5. while (<>) {
  6.     last if /^\s*(?:quit|exit)?\s*$/;
  7.     unless (/^\s*\d+\s*$/) {
  8.         say 'input a integer please!';
  9.         next;
  10.     }
  11.     given ($_ <=> $secret) {
  12.         when (-1) { say 'too low'}
  13.         when (0)  { say "you got it, it's $secret"; last}
  14.         when (1)  { say 'too high'}
  15.     }
  16. } continue {
  17.     print "> ";
  18. }
復(fù)制代碼
#6
  1. #!/usr/bin/perl -w

  2. use 5.012;

  3. sub func6 {
  4.     my $sum = 0;
  5.     $sum += $_ for @_;
  6.     my $mean = $sum/@_;
  7.     grep {$_ > $mean} @_;
  8. }
復(fù)制代碼
#8另發(fā)

論壇徽章:
0
26 [報(bào)告]
發(fā)表于 2011-02-25 17:03 |只看該作者
關(guān)注。。。。

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
27 [報(bào)告]
發(fā)表于 2011-02-25 17:08 |只看該作者
慢慢做。。。
1.
  1. sub myfunc {
  2.         # $x = ...;
  3.         1 if $x;
  4. }
復(fù)制代碼
2.$x=()結(jié)果為undef,也就是未定義。列表在標(biāo)量上下文中相當(dāng)于逗號(hào)操作符,表示列表中最后一個(gè)元素的值。是,()相當(dāng)于,(undef,undef......)。

3.
  1. my $foo = '1,2,3,5,6,7,8';
  2. my @foo = split /,/,$foo;
  3. my ($start,$i,$end) = ($foo[0])x3;

  4. for(1..$#foo)
  5. {
  6.         $i++;
  7.         if($foo[$_] == $i)
  8.         {
  9.                 $end = $foo[$_];
  10.                 if($_ == $#foo)
  11.                 {
  12.                         print "$start-$end";
  13.                 }
  14.         }
  15.         else
  16.         {
  17.                 if($start == $end)
  18.                 {
  19.                         print "$start,";
  20.                 }
  21.                 else
  22.                 {
  23.                         print "$start-$end,";
  24.                 }
  25.                 $i = $start = $end = $foo[$_];
  26.                 if($_ == $#foo)
  27.                 {
  28.                         print "$end";
  29.                 }
  30.         }
  31. }
復(fù)制代碼
4.@x[1]是$x[1]老的寫法,現(xiàn)在已經(jīng)不用。現(xiàn)在@x[1]還表示一個(gè)array slice。

論壇徽章:
59
2015七夕節(jié)徽章
日期:2015-08-24 11:17:25ChinaUnix專家徽章
日期:2015-07-20 09:19:30每周論壇發(fā)貼之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38榮譽(yù)版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年紀(jì)念徽章
日期:2015-07-20 11:05:27IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-07-20 11:05:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:36程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:40數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2015-07-20 11:05:432015年辭舊歲徽章
日期:2015-07-20 11:05:44
28 [報(bào)告]
發(fā)表于 2011-02-25 17:22 |只看該作者
本帖最后由 renxiao2003 于 2011-02-25 17:26 編輯

回復(fù) 24# wb112200


    是啊。大家都直接把答案貼在帖子里(就像PHP大賽)。這樣怎么能不雷同。ㄒ粋(gè)題的答案就那么幾種)。還是C/C++比較規(guī)范。把答案發(fā)EMAIL比較好。

論壇徽章:
0
29 [報(bào)告]
發(fā)表于 2011-02-25 17:22 |只看該作者
本帖最后由 珞水的大叔 于 2011-02-27 00:25 編輯

占個(gè)坑先:
1. 答:
  1. sub myfunc {
  2.     # $x = ...;

  3.     $x?1:undef;
  4. }
復(fù)制代碼
2. 答:是未定義;其值為列表中元素個(gè)數(shù),被賦值時(shí)會(huì)只給第0個(gè)元素賦值并拋棄其他元素;
    不是,當(dāng)一個(gè)列表剛被定義時(shí)就是個(gè)空列表,在列表環(huán)境中()可以用來(lái)給已含有元素的列表進(jìn)行初始化

3. 答:這個(gè)題目我一個(gè)正則搞定,嘿嘿
  1. my $lala = "1,2,3,5,6,7,8";
  2. while($lala =~ s/(\d+)[-,]((?<=-)\d+|(?<=,)(??{$1+1})),((??{$2+1}))/$1-$3/){};
  3. print $lala,"\n";
復(fù)制代碼
4. 答:這兩個(gè)的值是一樣的,但$x[1]是索引,@x[1]是切片,不過(guò)我不清楚具體實(shí)行原理有什么不同,但從以下例子可以知道切片的用途,比如:@y = @x[2,0] 表示 @y = ($x[2],$x[0])

5. 答:如果只要求當(dāng)前目錄下的文件而非所有文件的話,我覺得xfoucs在9樓寫的
  1. my @sorted=sort {(-M $a)<=>(-M $b)} (<*>);
復(fù)制代碼
就很OK
當(dāng)然,如果是當(dāng)前目錄下的所有文件的話,就是多了一個(gè)遍歷所有文件,如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub ls{
  5.     my @path = @_;
  6.     my @result;
  7.     while(scalar @path > 0){
  8.         my $dir = pop @path;
  9.         chomp $dir;
  10.         if(-d $dir){
  11.             opendir(my $dh, $dir);
  12.             my @tmp = map{"$dir/$_"} grep{$_ !~ /^\.+$/}readdir $dh;
  13.             push @path,@tmp;
  14.             push @result,@tmp;
  15.             closedir $dh;
  16.         }
  17.     }
  18.     return @result;
  19. }

  20. my @sorted = sort {(-M $a)<=>(-M $b)} (ls("."));
  21. print "$_\n" for @sorted;
復(fù)制代碼
6 答:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my $sum;
  5. $sum += $_ for @ARGV;
  6. print "$_\n" for grep {$_ >= $sum/@ARGV} @ARGV;
復(fù)制代碼
7. 答:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my $number = int(1+rand 100);
  5. while(<>){
  6.     chomp;
  7.     if(/^quit|exit|\s+$/){
  8.         exit;
  9.     }
  10.     elsif(/\D/ or /^$/){
  11.         print "輸入不符合規(guī)范,請(qǐng)輸入數(shù)字\n";
  12.     }
  13.     elsif($_ > $number){
  14.         print "too high\n";
  15.     }
  16.     elsif($_ < $number){
  17.         print "too low\n";
  18.     }
  19.     elsif($_ == $number){
  20.         print "right!\n";
  21.         exit;
  22.     }
  23. }
復(fù)制代碼

論壇徽章:
0
30 [報(bào)告]
發(fā)表于 2011-02-25 19:24 |只看該作者
不會(huì)Perl的來(lái)看熱鬧
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP