-1

私がやろうとしているのは、指定された場所にフォルダーを作成し、そのフォルダーに日付とユーザーのイニシャルを付けて名前を付けることです。フォルダ作成時にイニシャルを入力できるようにしたい。正しい形式で日付を生成する方法を理解しましたが、フォルダー名がこの「130506SS」のようなものになるように、ユーザー入力 $initials を一緒に追加する方法を理解する必要があります。これら 2 つの変数を結合して正しいフォルダー名を取得する方法がわかりません。誰でもこれを理解するのを手伝ってもらえますか?

    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 

編集: 2 つの変数を結合してフォルダー名を作成しようとしている場合を除いて、上記のスクリプトの全体が機能します。($mydate.= $initials;) 代わりに ($mydate.= "SS";) でテストしたところ、スクリプトは完全に機能しました。変数 $mydate と文字列を結合することはできますが、$initials を結合することはできません。

4

2 に答える 2

2

機能していないと思われるビットを示していませんが、作成したフォルダー/ファイル名に改行が埋め込まれているためだと思われます。

以下では、$mydate を日付文字列に初期化し、$initials を STDIN の行で初期化しています。

my $mydate = strftime("%y%m%d",localtime(time));
my $initials = <STDIN>;

ここで注意すべきことは、$initials の入力の最後に改行文字があることです。それらに参加する前に、その改行を取り除きたいと思うでしょう。次のコードは、あなたが望むことを行います:

chomp ($initials);
$mydate .= $initials;
于 2013-05-06T18:57:28.660 に答える
1

コードを実行すると、「/test/130506SS を作成できません」というエラーが表示されます。

1 つの問題は、mkdirがディレクトリを再帰的に作成できないことですが、 File::Pathmake_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
于 2013-05-06T18:59:52.777 に答える