首页 > 代码库 > perl学习笔记(3)—— 坑

perl学习笔记(3)—— 坑

(1)用perl来ls一个目录:

    写perl的时候,经常要调用到系统命令,perl有很多等价的函数可以用,但是,不小心任性了,就想用system来实现了,好吧,来个ls把,列出指定的一个目录,直接上代码

sub ls{
       my ($dir) = @_;
       system("ls -al $dir ");
}


不做参数校验了,直接ls一个目录,这个是试了一下,确实可以这样做,感觉是挺容易的,没压力。但是,你仔细想一想,这真的可行吗?仔细想一下使用场景,你会发现,这个是一个坑,据说,是惨痛的教训。

好了,不绕了,这是要在linux下使用的,linux下是允许文件名是有空格,要是我们输入一个带有空格的文件名,这里是会出错的,比如:你这样使用,

ls("files isnot done");

会被解释为“ls files isnot done”,这样就相当于ls了三个文件夹了,是不是很神奇。解决方法就是,把函数改为

sub ls{
       my ($dir) = @_;
       system("ls -al '$dir' ");
}
像你在linux下ls一个文件一样。


perl学习笔记(3)—— 坑