我要做的是在指定位置创建一个文件夹,然后使用日期和用户首字母命名该文件夹。我希望用户能够在创建文件夹时输入首字母。我已经弄清楚如何以正确的格式生成日期,但我需要弄清楚如何将用户输入$ initials一起添加,以便文件夹名称是这样的“130506SS”。我无法弄清楚如何将这两个变量连接在一起以获得正确的文件夹名称。任何人都可以帮我解决这个问题吗?
use strict ;
use warnings ;
use POSIX qw(strftime);
my $mydate = strftime("%y%m%d",localtime(time)); #puts the year month date and time in the correct format for the folder name
print "Enter users initials: ";
my $initials = <STDIN>; # prompts for user input
#$mydate.= "SS"; #stores today's date and the initials
$mydate.= $initials;
sub capture {
my $directory = '/test/' . $mydate;
unless(mkdir($directory, 0777)) {
die "Unable to create $directory\n";
}
}
capture(); #creates the capture folder
sub output {
my $directory = '/test2/' . $mydate;
unless(mkdir($directory, 0777)) {
die "Unable to create $directory\n";
}
}
output(); #creates the output folder
编辑:上述脚本的整个部分都有效,除非我尝试连接两个变量以创建文件夹名称。 ($ mydate。= $ initials;)我用($ mydate。=“SS”;)测试了它,而且脚本运行完美。我可以设法加入变量$ mydate和一个字符串,但不是$ initials。
答案 0 :(得分:2)
你没有说明你认为哪个位不起作用,但我怀疑是因为你在你创建的文件夹/文件名中有一个嵌入的换行符。
使用以下内容,您可以将$ mydate初始化为日期字符串,并使用STDIN中的一行初始化$:
my $mydate = strftime("%y%m%d",localtime(time));
my $initials = <STDIN>;
这里要注意的是$ initials在输入的末尾有一个换行符;在加入它们之前,你会想要摆脱那个换行符。以下代码将执行您想要的操作:
chomp ($initials);
$mydate .= $initials;
答案 1 :(得分:1)
运行代码时,出现错误:“无法创建/ test / 130506SS”。
一个问题是mkdir无法递归创建目录,但您可以使用File::Path中的make_path
。
另一个问题是你应该chomp
输入。
use strict;
use warnings;
use POSIX qw(strftime);
use File::Path qw(make_path);
my $mydate = strftime( "%y%m%d", localtime(time) ); #puts the year month date and time in the correct format for the folder name
print "Enter users initials: ";
my $initials = <STDIN>; # prompts for user input
chomp $initials;
#$mydate.= "SS"; #stores today's date and the initials
$mydate .= $initials;
sub capture {
my $directory = '/test/' . $mydate;
unless ( make_path( $directory) ) {
die "Unable to create $directory\n";
}
}
capture(); #creates the capture folder