Скрипт на Perl, печатающий входные данные в одну строку и другие

#perl

#perl

Вопрос:

У меня здесь проблема. Пожалуйста, посмотрите мои коды.

 use warnings;
use strict;


###ASK IMPUT FROM USER
print "Enter the Area: ";
my $area = <>;

print "Enter the Equipment: ";
my $equipment = <>;

print "Enter the Month: ";
my $month = <>;

print "Enter the Year: ";
my $year = <>;



###SUBROUTINE (FUNCTION) TO REMOVE THE WHITESPACE
sub rem_spaces {
    my $t = shift || return(0); #Common practice: Use shift to take $t as a first parameter passed to the subroutine
    $t =~ s/^s //; #remove leading spaces
    $t =~ s/s $//; #remove trailing spaces
    return $t;
}


####VARIABLE DECLARATION

my $REMOTE_HOST = "C:\Users\attmsbj1\Desktop\pic";
my $RESULT_FOLDER = "C:\Users\attmsbj1\Desktop\RESULT";


###CREATE FOLDER IF FOLDER DOES NOT EXIST.

if(-e $RESULT_FOLDER){
    print "File exists.";
}
else {
    mkdir ($RESULT_FOLDER);
}

###OPEN THE NEW FOLDER<br>
opendir (NewFolder, $RESULT_FOLDER) or die "Couldn't open the current directory: $!";



###OPEN PHOTOS FOLDER<br>
opendir (PicFolder, $REMOTE_HOST) or die "Couldn't open the current directory: $!";
@PicFolder =<PicFolder>;

###LOOP THROUGH ALL THE PICTURES IN THE FOLDER
foreach (@PicFolder)
{
    if(###FULL STRING INPUT BY USER = PICFOLDER)
    {
        ###MOVE OR COPY THE PICTURE TO THE NEW FOLDER
    }
}

closedir PicFolder;
  

Проблема теперь в том, 1) Как мне распечатать входные данные, предоставленные пользователем, в 1 строку??
Например. Область: 4;
Оборудование: TQC
Месяц : июль
Год выпуска : 2011
Я хочу напечатать это в 4TQCJuly2011.jpg

Я застрял в цикле

Спасибо за чтение и помощь.

Дополнительная информация Моя основная цель — создать скрипт на perl для

  1. Запрашивать входные данные у пользователя
  2. Откройте папку с фотографиями
  3. Сравните имя входных данных (объедините входные данные в *.jpg) от пользователя с именем изображения в папке с фотографиями
  4. Если это то же самое, переместите картинку или скопируйте картинку в новую папку

Я хочу, чтобы формат входных данных, предоставленных пользователем, был $ area $ equipment $ month $year.jpg

Он всегда выводит
4
TQC
ИЮЛЯ
2011
.jpg

вместо 4TQCJULY2011.jpg (Я хочу этот результат)

Комментарии:

1. Домашнее задание? Кроме того, пожалуйста, правильно отформатируйте

2. спасибо за формат. это моя первая публикация на этом сайте.

3. Конкатенация действительно так проста, как my $new_value = "$old_value$another_value" .

4. Чтобы удалить начальные и конечные пробелы, лучше использовать trim(…) из String::Util

Ответ №1:

Вы можете просто объединить их после chomping

 $area . $equipment . $month . $year
  

другие методы включают sprintf

 $result = sprintf("%s%s%s%s", $area, $equipment, $month,$year);
  

Смотрите perldoc -f sprintf подробнее

Комментарии:

1. Я хочу, чтобы формат был в таком виде $площадь $ оборудование $ месяц $year.jpg

2. итак, что происходит, когда вы используете оператор «.» для объединения этих строк? Помните о chomp каждом вводе. Также, чтобы поместить «.jpg» позади, снова используйте оператор «.». Я не понимаю, почему это так сложно.

3. Он печатает 4 TQC ИЮЛЬ 2011 .jpg в отдельной строке, а не в одной строке

4. я сказал, что сначала вам нужно обработать эти входные данные.

Ответ №2:

Я думаю, я, должно быть, неправильно понял ваш вопрос, но если все, что вы хотите сделать, это напечатать строки $ area, $ equipment, $ month и $ year, почему бы вам просто не использовать

 
 print ($area.$equipment.$month.$year.".jpg");'?
  

Комментарии:

1. пробовал это раньше, но не работает. Спасибо за ответ. Я просто новичок в perl

2. @Sharil Определяет «не работает». Что вы получаете и каковы ожидаемые результаты?

3. Он печатает 4 TQC ИЮЛЬ 2011 .jpg в отдельной строке, а не в одной строке

4. Возможно, вам нужно использовать chomp для ваших входных строк, чтобы удалить завершающие символы

Ответ №3:

Удалите все символы новой строки из переменных

 my $str = "$area$equipment$month$year.jpg";
$str =~ s/(r|n)//g; #you could potentially filter this more.. 
  

Примечание: Я не использовал perl в Windows, поэтому это может быть не на 100% правильно, linux, я бы использовал mv

 foreach my $cur (@PicFolder) {
    if($str =~ /$cur/){
       # I don't think this will work on windows.. `cp $PicFolder/$cur $NewFolder/$cur`;
       #this might work..
       rename ("$PicFolder/$cur, "$NewFolder/$cur" );
    }
}
  

Это должно помочь вам начать..