2013-03-15 4 views
1

Я очень новичок в Perl, и я хотел бы сделать программу, которая создает каталог и перемещает файл в этот каталог с помощью команды Unix, как:Команды Unix в Perl?

mkdir test 

Что я знаю бы сделать каталог с именем "контрольная работа". Оттуда я хотел бы дать больше вариантов:

mv *.jpg test 

Это переместит все файлы .jpg в мой новый каталог.

До сих пор у меня есть это:

#!/usr/bin/perl 

print "Folder Name:"; 
$fileName = <STDIN>; 
chomp($fileType); 

$result=`mkdir $fileName`; 
print"Your folder was created \n"; 

Может кто-нибудь помочь мне с этим?

+2

Perl имеет свой 'mkdir' функция ... – jordanm

+2

' использовать строгий; использовать предупреждения; ' – mob

+0

http://www.perlmonks.org/?node_id = 627015 – toolic

ответ

3

Попробуйте сделать это:

#!/usr/bin/perl 

use strict; use warnings; 

print "Folder Name:"; 
$dirName = <STDIN>; 
chomp($dirName); 

mkdir($dirName) && print "Your folder was created \n"; 
rename $_, "$dirName/$_" for <*.jpg>; 

Вы будете иметь лучший контроль при использовании встроенного в perl функций, чем при использовании команды Unix. Это точка моего фрагмента.

+0

+1 - Вы скопировали мою ссылку? –

+0

Спасибо @sputnick, но он дает мне следующее: Ваша папка была создана использование: mv [-f | -i | -n] [-v] исходная цель mv [-f | -i | -n] [-v] source ... directory – Scope

+0

Смешивание между вашей ссылкой и верхней частью моей головы;) –

1

Большинство (если не все) команды Unix имеют соответствующую версию в качестве функции

например

MkDir - см here

мв - См here

И т.д. либо получить печать из разных страниц руководства (или, возможно, побывать в книжном магазине - книга о орехах О'Рейлли неплоха вместе с другими).

+0

+1 для напоминания! знак равно –

0

В perl вы можете использовать команды bash в backticks. Однако что происходит, когда каталог не создается командой mkdir? Ваша программа не получает уведомления об этом и продолжает веселиться, думая, что все в порядке.

Вы должны использовать встроенную команду в perl, которая делает то же самое.

Это гораздо проще перехвата ошибок с этими функциями и не корректно. Кроме того, они работают быстрее, потому что вам не нужно разветвлять новый процесс для каждой команды, которую вы запускаете.

0

Perl имеет некоторые функции, аналогичные функциям оболочки. Вы можете просто использовать

mkdir $filename; 

Вы можете использовать обратные кавычки, чтобы запустить команду оболочки, но это полезно, только если команда возвращает ничего на стандартный вывод, который mkdir не делает. Для команд, без выхода, используйте system:

0 == system "mv *.jpg $folder" or die "Cannot move: $?"; 
Смежные вопросы