LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2473|回复: 12

刚学perl,练习~

[复制链接]
发表于 2005-6-6 09:57:16 | 显示全部楼层 |阅读模式
猜单词
[PHP]#!/usr/bin/perl
@words=qw(g r e e n);
@words1=qw(- - - - -);
@words2=qw(- - - - -);
BH: while ($i<100) {
    print "You Guess: ";
    $char=<STDIN>;
    chomp $char;
for ($index=0; $index<@words; $index++) {
    if ($words[$index] ne $char) {
        $words1[$index]="-";
    } else {
        $words1[$index]="$char";
        $words2[$index]="$char";
        print "$char is right!\n";
    }
}
print "@words2\n";
$zz="";
foreach $word2 (@words2) {
    $zz=$zz.$word2;
}
if ($zz eq green) {
last BH
}
}
print "OK!\n";[/PHP]
 楼主| 发表于 2005-6-6 11:18:53 | 显示全部楼层

从文件尾部开始读文件

倒序读文件
[PHP]#!/usr/bin/perl -w
open (MYFILE, "text") || die "$!";
@lines=<MYFILE>;
foreach (reverse(@lines)) {
    chomp $_;
    print scalar(reverse($_)),"\n";
}
close (MYFILE);[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-6 16:40:16 | 显示全部楼层
标准日期格式
[PHP]#!/usr/bin/perl -w
print "input time:";
$_=<STDIN>;
chomp $_;
if (/[0-1]{0,1}[0-9]{1}:[0-5]{1}[0-9]{1}(a|p)m/i) {
    print "$_ is right!\n";
} else {
    print "format error!\n";
}[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-6 17:21:49 | 显示全部楼层

找出至少拥有4个连续辅音或非元音字母的所有单词

文本文件:txt6
apple csdfdddd
thoughts dir
yardstick dffddfdd
app baa

[PHP]
#!/usr/bin/perl -w
open (FH,"txt6");
@inputs=<FH>;
foreach $input (@inputs) {
    chomp $input;
    @aas=split(/ /, $input);
    foreach $aa (@aas) {
        chomp $aa;
        $_=$aa;
        if (/[^aeiou]{4,}/i) {
            print "$_\n";
        }
    }
}
close (FH);
[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-9 17:59:50 | 显示全部楼层
哈希结构做的类似数据库添加查询
[PHP]#!/usr/bin/perl -w
open (FH,'7text') || die "$!";

while(<FH>) {
    chomp;
    ($name, $number, $email)=(split(/\s+/,$_));
    $name{$number}=$name;
    $email{$number}=$email;
}
close (FH);
GO: while(1) {
        print "input number:";
        $_=<STDIN>;
        chomp $_;
        if ($name{$_}) {
            print "number:",$_,"\n";
            print "name:",$name{$_},"\n";
            print "email:",$email{$_},"\n";      
        } else {
            print "this number is not in database, do you want add record?(y/n) ";
            $YN=<STDIN>;
            chomp $YN;
            if ($YN eq "y") {
                print "input name: ";
                    $iname=<STDIN>;
                    chomp $iname;
                    $name{$_}=$iname;
                print "\ninput email: ";
                    $iemail=<STDIN>;
                    chomp $iemail;
                    $email{$_}=$iemail;
                open (APPENDFH, ">>7text") || die "$!";
                print APPENDFH "$name{$_} $_ $email{$_}\n";
                close (APPENDFH);   
                print "record add in database!\n";
                last GO;
            } else {
                print "You select n, exit!\n";
                last GO;
            }               
        }
        print "Quit?(y/n) ";
        $YN1=<STDIN>;
            chomp $YN1;
            if ($YN1 eq "y") {
               last GO;
            } else {
                next;
            }
    }[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-25 11:07:47 | 显示全部楼层

为什么当我要输出大约50个数时系统要运算好久好久~~?

递归练习:输出斐波纳奇数列
斐波纳奇数列是数学和自然界中的一种递归模式

[PHP]
#!/usr/bin/perl -w
sub fbnqsl {
    my ($number)=@_;
    return (0) if ($number == 0);
    return (1) if ($number == 1);
    return (fbnqsl($number-2)+fbnqsl($number-1));
}

print "please input number:";
$char=<STDIN>;
    chomp $char;
for ($i = 0;  $i <= $char; $i++ ) {
print fbnqsl($i)," ";
}
[/PHP]
:ask
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-25 11:59:18 | 显示全部楼层
遍历搜索字符串
从左向右
[PHP]
#!/usr/bin/perl
$a="aa ab ac abc ab";

sub searchstr {
    return index ($a, $char,$search);
}

print "Input search sub string:";
$char=<STDIN>;
chomp $char;
print "Search start:";
$search=<STDIN>;
chomp $search;

while (($search=searchstr($a,$char,$search)) != -1) {
    print " ",searchstr($a,$char,$search);
    $search=$search+1;
}
[/PHP]

从右向左
[PHP]
#!/usr/bin/perl
$a="aa ab ac abc ab";
$search=length($a);
sub searchstr {
    return rindex ($a, $char,$search);
}

print "Input search sub string:";
$char=<STDIN>;
chomp $char;
while (($search=searchstr($a,$char,$search)) != -1) {
    print " ",searchstr($a,$char,$search);
    $search=$search-1;
}
[/PHP]
回复 支持 反对

使用道具 举报

发表于 2005-7-25 18:45:59 | 显示全部楼层
Post by huhuegg
递归练习:输出斐波纳奇数列
斐波纳奇数列是数学和自然界中的一种递归模式

[PHP]
#!/usr/bin/perl -w
sub fbnqsl {
    my ($number)=@_;
    return (0) if ($number == 0);
    return (1) if ($number == 1);
    return (fbnqsl($number-2)+fbnqsl($number-1));
}

print "please input number:";
$char=<STDIN>;
    chomp $char;
for ($i = 0;  $i <= $char; $i++ ) {
print fbnqsl($i)," ";
}
[/PHP]
:ask
每层有两个递归调用,就是用C++也要算好长时间,计算复杂度太高。而且可能不到第80项就溢出了。
回复 支持 反对

使用道具 举报

发表于 2005-7-26 11:23:19 | 显示全部楼层
可以加个array存储上次计算结果...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-26 14:14:11 | 显示全部楼层
呵呵,谢谢大家指点~ :thank

在指定文件夹中的文件中查找包含指定字符的行
[PHP]
#!/usr/bin/perl -w
printf"write the path you want to search files:";
$searchdir=<STDIN>;
chomp $searchdir;
printf "Input search string:";
$searchstr=<STDIN>;
chomp $searchstr;
opendir(DIRHANDLE,$searchdir) || die "Cann't open $searchdir !";
while($file=readdir DIRHANDLE) {
        if (-d "$searchdir/$file") {
                printf "$searchdir/$file is a directory!\n";
        } else {
                open(FileHandle, "$searchdir/$file") || die "cann't open $searchdir/$file !\n";
                $lines=1;
                while (defined($line=<FileHandle>)) {
                        $back=index($line,$searchstr);
                        if ( $back != -1 ) {
                                print"$filelinesline";
                        }
                $lines=$lines+1;
                }
        }
        close(FileHandle);
}
closedir(DIRHANDLE);

[/PHP]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表