1. [12]写一个程序要求用户输入一个目录名,再改变到那个目录去。如果用户输入的值是空白,则转变到他/她的主目录
去。改变后,将这个目录下的普通内容(不包括有点(.)开头的项)按照字母顺序列出来。(提示:使用目录句柄还
是glob 更方便?)如果没有成功改变目录,提示用户,但不要尝试输出目录里的内容。
2. [4]修改程序,使之包含所有的文件,不仅仅是那些不以点(.)开头的文件。
3. [5]如果你在前面的练习中使用的是目录句柄,使用glob 重写它。如果使用的是glob,则用目录句柄重写。
4. [6]写一个类似于rm 的程序,删除命令行中出现的任何文件。(不需要处理像rm 中的选项)
5. [10]写一个类似于mv 的程序,将命令行中的第一个参数重命名为第二个参数。(不需要处理像mv 中的选项,或别的
参数。)允许它是一个目录;如果是,使用相同的基本名字(basename),生成新的目录。
6. [7]如果你的操作系统支持,写一个类似于ln 的程序,能建立命令行中第一个参数的硬连接(hard link)到第二个参数。(不
需要处理ln 的选项,或者更多的参数。)如果系统没有硬连接,那么输出一条消息,指出如果可行你将进行的操作。
提示:这个程序和前面的有类似的地方,注意到这一点能节约你编码的时间。
7. [7]如果你的操作系统支持,修改上一个练习的程序,使之支持–s 选项(在别的参数前面),来表明你想创建一个软连
接(soft link)而非(hard link)。(甚至在你没有硬连接的情况,你也有可能能创建软连接。)
8. [7]如果你的操作系统支持,写一个程序来查找当前目录下的符号连接(symbolic links),并将它们的值打印出来(如ls
–l 一样:name -> value)。
1、
#!/usr/bin/perl -w
use strict;
if (@ARGV){
chdir $ARGV[0] or die "cannot chdir to $ARGV[0]:$!";
}else{
chdir or die "cannot chdir to ~:$!";
}
foreach (<*>){
print $_,"/n";
}
2、
#!/usr/bin/perl -w
use strict;
if (@ARGV){
chdir $ARGV[0] or die "cannot chdir to $ARGV[0]:$!";
}else{
chdir or die "cannot chdir to ~:$!";
}
foreach (<.* *>){
print $_,"/n";
}
3、
#!/usr/bin/perl -w
use strict;
print "Which directory?(Default is you home directory): ";
chomp(my $dir=<STDIN>);
if ($dir=~/^/s*$/){
chdir or die "Can't chdir to you home directory: $!";
}else{
chdir $dir or die "Can't chdir to $dir: $!";
}
opendir DH,"." or die "Can't opendir DH: $!";
foreach (sort readdir DH){
# next if /^/./;
print $_,"/n";
}
4、
#!/usr/bin/perl -w
use strict;
for (@ARGV){
unlink $_;
}
5、
#!/usr/bin/perl -w
use strict;
rename $ARGV[0],$ARGV[1];
6、
#!/usr/bin/perl -w
use strict;
link $ARGV[0],$ARGV[1] or warn "can't link";
7、
#!/usr/bin/perl -w
use strict;
symlink $ARGV[0],$ARGV[1] or warn "can't symlink";
8、
#!/usr/bin/perl -w
use strict;
foreach(<.* *>){
my $dest=readlink $_;
print "$_ -> $dest/n" if defined $dest;
}