Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225759
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-04-06 18:27:10

1、三行perl代码模拟生成注册码2011-04-06
  1. my @str = ('A'..'Z');
  2. my $lic = join '', map { $str[int rand @str] } (1..25);
  3. $lic =~s/(\w{5})(?=\w{5})/$1-/g;
  4. #print $lic,"\n";

    最近做了些工具给同事使用,但不想被随意扩散,所以想对工具做些限制,接下来准备学习些源码保护与软件的注册机制。

 

2、最近写的代码越来越长了,追求完美的我,总希望代码在书写的过程中就是整洁美观的,但生性懒惰的我又不想重复地perltidy,想到使用perl的多数是懒人,CPAN上可能会有模块能解决我的问题,于是找了一下还真找到了一个叫Acme::PerlTidy的模块。

    使用很简单,只要在IDE窗口的代码中“use Acme::PerlTidy;”,执行时就是tidy代码而非运行代码了,当不需要时,只要将其注释掉就可以了,即#use Acme::PerlTidy。这样实时tidy代码就变得很简单了。

 

3、YAML::Tiny的使用

  1. use YAML::Tiny;

  2. my $file = 'yaml.yml';
  3. my @arr = ( undef, undef, 'babc' );

  4. #追加写入文件的方式
  5. YAML::Tiny::DumpFile( ">$file", \@arr );
  6. my $yaml = YAML::Tiny->read($file);

  7. print "最后一份记录初始值为:\n";
  8. print Dump(\@arr);

  9. #读入yaml后,整份文件的记录放在数组@{$yaml}中。
  10. my $num= scalar @{$yaml}-1;
  11. #取最后一份记录数组中的第三个元素
  12. print "\n最后一份记录的第三个元素为:$yaml->[$num]->[2]\n";

  13. my $i=0;
  14. foreach my $v ( @{$yaml->[$num]} ) {
  15.     if ( !defined $v ) {
  16.         $yaml->[$num]->[$i] = $i;
  17.     }
  18.     else {
  19.         delete $yaml->[$num]->[$i];#删除abc
  20.     }
  21.     $i++;
  22. }
  23. print "\n最后一份记录修改后为:\n";
  24. print Dump(\@{$yaml->[$num]});

  25. $yaml->write($file);#保存更改

 

4、Time::Interval可以计算两日期的相差天数,但区分不出是早了还是迟了,所以比较4月8号以后两日期$data1与$data2可以如下写:

  1. #$data1-$data2
  2. my $day=_CouDays(data1,'04-08-2011')-_CouDays(data1,'04-08-2011');
  3. sub _CouDays {
  4.     require Time::Interval;
  5.     my ( $data1, $data2 ) = @_;
  6.     my $days = Time::Interval::getInterval( $data1, $data2, "days" );
  7.     $days =~ s/(\d+).*/$1/g;
  8.     return $days;
  9. }

5、提取介于某个区间的几行文字:$start 表示开始标记的模式,$end 表示结束标记的模式

  1. if ( (/$start/ .. /$end/) and !/$end/ ){

  2. }

6、查找安装了哪些perl模块。附件: pmtools.rar 

来源:;解压后放于\perl\lib内。

使用:

  1. # perl -Mpmtools -e 'pminst';

 

7、perl也能实现类似Ruby的迭代器:5.times { |each| ... }

  1. use Moose::Autobox;
  2. sub Moose::Autobox::SCALAR::times {
  3.     my($count, $block) = @_;
  4.     1->to($count)->each_key($block);
  5. }

  6. 5->times(sub {$_->say});
  1. use Moose::Autobox;
  2. print "Squares: " . [ 1 .. 10 ]->map(sub { $_ * $_ })->join(', '),"\n";
  3. print ["apple", "orange", "banana", "watermelon"]->grep(sub{/an/})->join("\n");

8、简单几句代码就能实现文件内容的替换

  1. use Tie::File;
  2. use Data::SearchReplace qw(sr);
  3. tie @data, 'Tie::File', 'one.txt', autochomp => 1
  4.   or die "Problem tying @array: $!";
  5. sr( { REGEX => 's/mtk_color/%market/g' }, \@data );
  6. untie @data;

9、0到4中挑选3个数可以组成哪些组合

  1. use Math::Combinatorics;
  2. @n = ( 0 .. 4 );
  3. print join( "\n", map { join( " ", @{$_} ) } combine( 3, @n ) ), "\n";
10、初始化二维数组
  1. sub array {
  2.     my ( $x, $y ) = @_;
  3.     map { [ (0) x $x ] } 1 .. $y;
  4. }
  5. my @square = array 3, 3;
  6. $square[1][1] = 1;
  7. print "@$_\n" for @square;
11、加密解密
  1. sub encipher {
  2. my ($_, $k, $decode) = @_;
  3. $k = 26 - $k if $decode;
  4. join('', map(chr(((ord(uc $_) - 65 + $k) % 26) + 65), /([a-z])/gi));
  5.  }

  6. my $msg = 'THE FIVE BOXING WIZARDS JUMP QUICKLY';
  7. my $enc = encipher($msg, 12);
  8. my $dec = encipher($enc, 12, 'decode');
  9. print "msg: $msg\nenc: $enc\ndec: $dec\n";
12、函数根据上下文返回数组或数组引用
  1. my @a=qw(1 2 3 4 5);
  2. my $b=either(@a);
  3. my @c=either(@a);
  4. print join('-',@$b),"\n";
  5. print join('-',@c),"\n";

  6. sub either {
  7.   my @a=@_;
  8.   return wantarray ? @a: \@a;
  9. }
13、一次取出数组的三个元素
  1. my @whatever = ( 1, 2, 3, 4, 5, 6 );
  2. while ( my ( $one, $two, $three ) = splice @whatever, 0, 3 ) {
  3.     print "$one:$two:$three\n";
  4. }
阅读(3075) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

rubyish2011-09-01 20:10:12

学习也挺有意思的。。

x9x92011-06-09 21:53:32

嗯,8错,学习了~