Hi !

Sorry for my english !

My script must rename file name, but don't do it.

What is wrong with this script:

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!/usr/bin/perl
use warnings;
use strict;
use File::Path;
use Cwd;
use File::Copy;
use File::Spec::Functions;
#hardcoded 
my $FP = 'D:\conv';
my $TP = 'D:\sgml_db';
#my $NAME = 'mmc1';
my ($from_file, $to_file) = ($ARGV[0], $ARGV[0]);
my $cwd = `cd`;
chomp $cwd;
my ($from_dir, $to_dir) = ($cwd, $cwd);
#rename file part
#$to_file =~ s/.*\.(.+)/$NAME.$1/;
my $some_file = (<$to_dir>)[0];
my ($prefix) = $some_file =~ m/(\d+_\d+_\d+)[^\\]*$/;
$to_file =~ s/^(\w+)(\d*)\.(\w+)$/"$prefix_" . uc($1) . ($2 || 0) . "_ESM.$3"/e;
#rename dir part
$to_dir =~ s/^\Q$FP\E/$TP/;
mkpath($to_dir);
copy(catfile($from_dir, $from_file), catfile($to_dir, $to_file)) 
    or die "can't copy file";
exit 0;

__END__
:endofperl
my $FP = 'D:\conv';
my $TP = 'D:\sgml_db';
my $cwd = `cd`;  # Get current working directory
my ($from_dir, $to_dir) = ($cwd, $cwd);

# if your current working directory ($to_dir) doesn't have 'D:\conv' the below line doesn't change the value of $to_dir. 
# So $to_dir equals to current directory and it already exists. 
# So mkpath($to_dir) doesn't work.

$to_dir =~ s/^\Q$FP\E/$TP/;
mkpath($to_dir);

So ensure your $to_dir value must match the $FP value and you will be get the expected output.

my $FP = 'D:\conv';
my $TP = 'D:\sgml_db';
my $cwd = `cd`;  # Get current working directory
my ($from_dir, $to_dir) = ($cwd, $cwd);

# if your current working directory ($to_dir) doesn't have 'D:\conv' the below line doesn't change the value of $to_dir. 
# So $to_dir equals to current directory and it already exists. 
# So mkpath($to_dir) doesn't work.

$to_dir =~ s/^\Q$FP\E/$TP/;
mkpath($to_dir);

So ensure your $to_dir value must match the $FP value and you will be get the expected output.

$ head -n7 1perl.pl 
use strict;
use warnings;
use 5.010;


my $cwd = `cd`;
say $cwd;

$ perl 1perl.pl 

$

Edited 7 Years Ago by 7stud: n/a

$ head -n7 1perl.pl 
use strict;
use warnings;
use 5.010;

my $cwd = `pwd`;
say $cwd;

$ perl 1perl.pl 
/Users/me/2testing/dir1/perl_programs

$

Hi !

Now I have problem:

"Global symbol $prefix" requires explicit package name".

What I must write for it.

my $FP = 'D:\conv';
my $TP = 'D:\sgml_db';
my $cwd = `cd`;  # Get current working directory
my ($from_dir, $to_dir) = ($cwd, $cwd);

# if your current working directory ($to_dir) doesn't have 'D:\conv' the below line doesn't change the value of $to_dir. 
# So $to_dir equals to current directory and it already exists. 
# So mkpath($to_dir) doesn't work.

$to_dir =~ s/^\Q$FP\E/$TP/;
mkpath($to_dir);

So ensure your $to_dir value must match the $FP value and you will be get the expected output.

$to_file =~ s/^(\w+)(\d*)\.(\w+)$/"$prefix_" . uc($1) . ($2 || 0) ."_ESM.$3"/e;

For your output format purpose you added "_". But it treated as a scalar variable. So change "$prefix_" to "$prefix" for the above line.

Hello friend, Is the below lines are working in your program? why you use the lines?

my $some_file = (<$to_dir>)[0];
my ($prefix) = $some_file =~ m/(\d+_\d+_\d+)[^\\]*$/;
This article has been dead for over six months. Start a new discussion instead.