perl - 基础
程序员文章站
2022-07-09 18:50:00
...
第二章 标量数据
第三章 列表和数组
第四章 子程序
写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字
第五章 输入与输出
输出到文件
文件-> 控制台
格式化数据
输出到错误文件
运行命令chapter5.pl 2> err.txt
第六章 哈希
写一个程序,读入一串单词(一个单词一行)◆,输出每一个单词出现的次数。(提示:如果某个作为数字使用值是
undefined 的,会自动将它转换为0。)如果输入单词为fred, barney, dino, wilma, fred(在不同行中),则输出的fred 将为
3。作为额外的练习,可以将输出的单词按照ASCII 排序。
exists 函数
第十一章 文件检验
第十二章 目录操作
列出某个文件夹下的文件
删除文件
移动文件
第十一章 字符串和排序
数字排序
字母排序
第十四章 进程管理
调用系统命令
#!/usr/bin/perl -w $pi = 3.141592654; $circ = 2 * $pi * 12.5; print "The circumference of a circle of radius 12.5 is $circ.\n";
print "Enter first number: "; chomp($one = <STDIN>); print "Enter second number: "; chomp($two = <STDIN>); $result = $one * $two; print "The result is $result.\n";
print "Enter a string: "; $str = <STDIN>; print "Enter a number of times: "; chomp($num = <STDIN>); $result = $str x $num; print "The result is:\n$result";
第三章 列表和数组
print "Enter some lines, then press Ctrl-D:\n"; # or maybe Ctrl-Z @lines = <STDIN>; @reverse_lines = reverse @lines; print @reverse_lines;
@names = qw/ fred betty barney dino wilma pebbles bamm-bamm /; print "Enter some numbers from 1 to 7, one per line, then press Ctrl-D:\n"; chomp(@numbers = <STDIN>); foreach (@numbers) { print "$names[ $_ - 1 ]\n"; }
print sort <STDIN>;
第四章 子程序
sub marine { $n += 1; #全局变量$n print "Hello, sailor number $n!\n"; } &marine; #输出Hello, sailor number 1! &marine; #输出Hello, sailor number 2! &marine; #输出Hello, sailor number 3! &marine; #输出Hello, sailor number 4!
$n = &max(44,15,22); print "$n"; sub max{ if(@_!=2){ print "WARNING! &max should get exactly two arguments!\n"; return; } if($_[0] > $_[1]){ print "$_[0]\n"; }else{ print "$_[1]\n"; } return $_[0] + $_[1]; }
sub total { my $sum; # private variable foreach (@_) { $sum += $_; } return $sum; } my @fred = qw{ 1 3 5 7 9 }; my $fred_total = &total(@fred); print "The total of \@fred is $fred_total.\n"; print "The numbers from 1 to 1000 add up to ", &total(1..1000), ".\n";
写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字
sub total { my $sum; # private variable foreach (@_) { $sum += $_; } $sum; } sub average { if (@_ == 0) { return } my $count = @_; my $sum = &total(@_); # from earlier exercise $sum/$count; } sub above_average { my $average = &average(@_); my @list; foreach $element (@_) { if ($element > $average) { push @list, $element; } } @list; } my @fred = &above_average(1..10); print "\@fred is @fred\n"; print "(Should be 6 7 8 9 10)\n"; my @barney = &above_average(100, 1..10); print "\@barney is @barney\n"; print "(Should be just 100)\n";
第五章 输入与输出
while(<STDIN>){ print "I saw2 $_\n"; }
while(<>){ chomp; print "It was $_ that I saw!\n"; }
输出到文件
$output = "test.txt"; open FH,">", "$output"; print FH "Tristan Blenheim 101\n"; print FH "Betty Boop 201\n"; print FH "Igor Chevsky 301\n"; print FH "Norma Cord 401\n"; print FH "Jonathan DeLoach 501\n"; print FH "Karen Evich 601\n"; close FH;
文件-> 控制台
open IN, "<", "test.txt" or die; @a = <IN>; close IN; print "@a";
格式化数据
open FH, "<", "test.txt"; foreach $line(<FH>){ $line =~ s/\x0D?\x0A?$//; #取得一行,去掉结尾换行符 @datas = split(" ",$line); #把空格当中分隔符,取得数据 print "@datas\n"; }
输出到错误文件
运行命令chapter5.pl 2> err.txt
print "Hello, World!\nabc"; print STDERR "Hi\n";
第六章 哈希
#my %last_name = qw{ # fred flintstone # barney rubble # wilma flintstone #}; my %last_name; $last_name{"fred"} = "flintstone"; $last_name{"barney"} = "rubble"; $last_name{"wilma"} = "flintstone"; print "Please enter a first name: "; chomp(my $name = <STDIN>); print "That's $name $last_name{$name}.\n";
写一个程序,读入一串单词(一个单词一行)◆,输出每一个单词出现的次数。(提示:如果某个作为数字使用值是
undefined 的,会自动将它转换为0。)如果输入单词为fred, barney, dino, wilma, fred(在不同行中),则输出的fred 将为
3。作为额外的练习,可以将输出的单词按照ASCII 排序。
my(@words, %count, $word); # (optionally) declare our variables chomp(@words = <STDIN>); foreach $word (@words) { $count{$word} += 1; # or $count{$word} = $count{$word} + 1; } foreach $word (keys %count) { # or sort keys %count print "$word was seen $count{$word} times.\n"; }
exists 函数
my %last_name; $last_name{"fred"} = "flintstone"; $last_name{"barney"} = "rubble"; $last_name{"wilma"} = "flintstone"; my $name = <STDIN>; #读入下一行; chomp($name); if(exists $last_name{$name}){ print "Exists"; }else{ print "not exists"; }
第十一章 文件检验
if(-e "test.txt"){ print "e"; }
第十二章 目录操作
列出某个文件夹下的文件
print "Which directory? (Default is your home directory) "; chomp(my $dir = <STDIN>); if ($dir =~ /^\s*$/) { # A blank line chdir or die "Can't chdir to your home directory: $!"; } else { chdir $dir or die "Can't chdir to '$dir': $!"; } my @files = <*>; foreach (@files) { print "$_\n"; }
删除文件
foreach (@ARGV) { unlink $_ or warn "Can't unlink '$_': $!, continuing...\n"; }
移动文件
use File::Basename; use File::Spec; my($source, $dest) = @ARGV; if (-d $dest) { my $basename = basename $source; $dest = File::Spec->catfile($dest, $basename); } rename $source, $dest or die "Can't rename '$source' to '$dest': $!\n";
第十一章 字符串和排序
数字排序
my @numbers; while (<>) { push @numbers, split; } foreach (sort { $a <=> $b } @numbers) { printf "%20g\n", $_; }
字母排序
my @letters; while (<>) { push @letters, split; } foreach (sort { $a cmp $b } @letters) { printf "$_\n"; }
第十四章 进程管理
调用系统命令
chdir "c:/" or die "Can't chdir to root directory: $!"; exec "dir" or die "Can't exec dir: $!";
上一篇: 分治算法--汉诺塔问题