作者DonDonMo ()
看板Perl
标题[请益] 用sub function建立子目录的问题
时间Thu Jan 8 00:20:10 2015
如果我想在mother_folder中建立目录树(不用File::Path的话)
也就是第一层是@aaa中的三个资料夹, 每个资料夹各建@bbb中的二个资料夹
成功写法如下:
@aaa=(aaa1,aaa2,aaa3);
@bbb=(bbb1,bbb2);
chdir ("./folder1");
for ($i=0;$i<=$#aaa ;$i++)
{
mkdir "$aaa[$i]";
chdir ("./$aaa[$i]");
for ($j=0;$j<=$#bbb ;$j++)
{
mkdir "$bbb[$j]";
}
chdir ("../");
}
chdir ("../");
但如果用sub function写法的话:
sub make_folder
{
my($mother_folder,@layer1,@layer2)=@_;
chdir ("./$mother_folder");
for ($i=0;$i<=$#layer1 ;$i++)
{
mkdir "$layer1[$i]";
chdir ("./$layer1[$i]");
for ($j=0;$j<=$#layer2 ;$j++)
{
mkdir "$layer2[$j]";
}
chdir ("../");
}
chdir ("../");
}
&make_folder("./folder2",@aaa,@bbb);
会发现在第一个for回圈时就把@aaa跟@bbb中的资料夹都建在folder2中了
请问这样的写法是否有问题呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.228.238.197
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Perl/M.1420647612.A.C8B.html
1F:推 flu: 因为你呼叫sub时传入的两个array,用目前的写法在sub的第一行 01/08 00:34
2F:→ flu: 通通赋值给@layer1了,也就是 @layer1=(@aaa, @bbb) 01/08 00:35
3F:推 flu: 解法可以用1. reference 2. sub prototype解决 01/08 01:04
4F:→ flu: 1的文章可以在板上 /reference 01/08 01:05
5F:→ DonDonMo: 感谢感谢flu大 已用/@再带入subroutine解掉 01/08 18:41
6F:推 flu: 取reference是用"\"喔 01/08 18:54