• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

寒假【perl语言学习脚本】13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


#!/usr/bin/perl -w
print “which directory?(Default is your home directory)”;
chomp(my dir=<STDIN>);if(dir=<STDIN>); if(dir=~/\A\s*\Z/){#空白行
chdir or die “can’t chdir to your home directory:$!”;
}else{
chdir dirordie&quot;cantchdirtodir or die &quot;can&#x27;t chdir to &#x27;dir’:KaTeX parse error: Expected 'EOF', got '}' at position 6: !"; }̲ my @files=<*>…_\n";
}

#首先,我们会显示一个简单的提示,然后取得用户想要的目录,对它进行必要的chomp
#如果没有chomp,则会尝试转到一个名称结尾有换行符的目录,chdir函数不能自动帮你把换行符去掉
#接下来,如果目录不是空的,我们会切换到该目录下,遇到错误就中断执行,如果名称是空的,就以用户主目录来代替
#最后,使用星号的glob操作会返回(新)工作目录中所有的文件名,并自动按字母顺序排序,然后逐一输出


#!/usr/bin/perl -w
#!/usr/bin/perl -w
print “which directory?(Default is your home directory)”;
chomp(my dir=&lt;STDIN&gt;);if(dir=&lt;STDIN&gt;); if(dir=~/\A\s*\Z/){#空白行
chdir or die “can’t chdir to your home directory:$!”;
}else{
chdir dirordie&quot;cantchdirtodir or die &quot;can&#x27;t chdir to &#x27;dir’:KaTeX parse error: Expected 'EOF', got '}' at position 6: !"; }̲ my @files=<.*…\n";
}
#和前一题有两点差别,第一,这次的glob操作符包含了“点号星号”,它会匹配所有以点号开头的文件名
#第二,我们必须对所得到的的列表进行排序,因为取出的列表中,以点号开头的文件名会和不以点号开头的文件名交错排列
#看起来比较凌乱,排序之后会清楚很多

#!/usr/bin/perl -w
print “which directory?(Default is your home directory)”;
chomp(my dir=&lt;STDIN&gt;);if(dir=&lt;STDIN&gt;); if(dir=~/\A\s*\Z/){
chdir or die “can’t chdir to your home directory:$!”;
}else{
chdir dirordie&quot;cantchdirtodir or die &quot;can&#x27;t chdir to &#x27;dir’:KaTeX parse error: Expected 'EOF', got '}' at position 6: !"; }̲ opendir DOT,"…!";
foreach (sort readdir DOT){
#next if /\a./;#如果跳过文件名以点号开头的文件
print "$
\n";
}
#如果你在前题使用的是目录句柄,用文件名匹配重写一次
#如果使用的是文件名通配,用目录句柄重写一次
#这个程序的结构跟前两题一样,但是现在我们改用打开目录句柄的方式,
#变更工作目录之后,我们会打开当前目录,也就是DOT目录句柄
#为什么要用DOT呢?
#如果用户输入了像/etc这样的绝对目录名称,那么打开它并没有什么问题,
#但是,如果用户键入了像fred这样的相对目录名称呢?
#readdir函数会取得目录里所有的文件名,然后再由程序将他们排序输出
#如果用这种方式来做第一题,那么我们就应该略过文件名以点号开头的文件
#要这么做,只需把foreach循环里的注释去掉就行了
#readdir类型的函数不一定要当前目录,其实可以作用在任何目录上


#!/usr/bin/perl -w
foreach(@ARGV){
unlink orwarn&quot;cantunlink_ or warn &quot;can&#x27;t unlink &#x27;':KaTeX parse error: Expected 'EOF', got '\n' at position 16: !,continuing...\̲n̲"; } #如果想在程序遇到问…,然后称为unlink的参数
#如果其中出现问题,警告信息能提供线索


#!/usr/bin/perl -w
use File::Basename;
use File::Spec;
my(source,source,dest)[email protected];
if (-d $dest){
my $basename =basename $source;
dest=File::Spec&gt;catfile(dest=File::Spec-&gt;catfile(dest,$basename);
}
rename source,source,dest or die "can’t rename ‘sourcetosource&#x27; to &#x27;dest’:KaTeX parse error: Expected 'EOF', got '\n' at position 2: !\̲n̲"; #功能类似mv,将命令行…dest是目录,我们需要从sourcesource名称中取出文件基名,并将它附加到dest后面
#最后,一旦$dest经过必要的处理,rename函数会执行实际改名的动作

#!/usr/bin/perl -w
use File::Basename;
use File::Spec;
my(source,source,dest)[email protected];
if (-d $dest){
my $basename =basename $source;
dest=File::Spec&gt;catfile(dest=File::Spec-&gt;catfile(dest,$basename);
}
link source,source,dest or die “can’t link ‘sourcetosource&#x27; to &#x27;dest’????!\n”;
#功能类似ln,建立从第一个参数到第二个参数的硬链接
#这个程序和前一题的十分相似,唯一的差别在于这次执行的是link而非rename


#!/usr/bin/perl -w
use File::Basename;
use File::Spec;
my symlink=symlink=ARGV[0] eq ‘-s’;
shift @ARGV if symlink;my(symlink; my(source,$dest)[email protected];
if (-d $dest){
my $basename =basename $source;
dest=File::Spec&gt;catfile(dest=File::Spec-&gt;catfile(dest,KaTeX parse error: Expected 'EOF', got '}' at position 12: basename); }̲ if (symlink){
symlink source,source,dest or die “can’t make soft link ‘sourcetosource&#x27; to &#x27;dest’????!\n”;
}else{
link source,source,dest or die "can’t make hard link from ‘sourcetosource&#x27; to &#x27;dest’:KaTeX parse error: Expected 'EOF', got '\n' at position 2: !\̲n̲"; } #开头几行程序代码(…symlink变量中
#如果检查到了-s,我们还得把它去掉
#最后,依照$symlink的值是真是假,程序会选择建立硬链接或者软连接
#最后,还更改了die后面的信息,让它清楚地显示出我们试图建立的是哪一种链接
#-s选项,建立软连接,而非硬链接

#!/usr/bin/perl -w
foreach(glob(’.* ‘)){
my $dest=readlink ;print&quot;_; print &quot;_->$dest\n" if defined KaTeX parse error: Expected 'EOF', got '}' at position 8: dest; }̲ #表达式 .* 就是单个字符…_的值
#如果这个条目是软连接,那么就会由readlink返回一个已定义的值并输出链接位置
#如果不是,测试条件就会失败,从而使得程序略过这个条目
#让它在当前目录下查找所有符号链接并输出它们的值,和ls -l的格式一样:name->value
#glob(’.
*’)这个地方中间有空白


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap