Perl IF вопрос об утверждении - PullRequest
1 голос
/ 18 сентября 2011

прямо сейчас у меня есть следующий код perl

my $tmpl1="download1_video.html"
 if $file->{file_name}=~/\.(avi|divx|mkv|flv|mp4|wmv)$/i;
$tmpl1||="download1.html";

, поэтому он проверяет, является ли файл видео, и если да, то он направляет его на определенную страницу.Хотя мне просто интересно, как я могу добавить еще один оператор if, чтобы проверить, является ли расширение .mp3, и если это так, направьте его на download1_audio.html

Спасибо!:)

Ответы [ 3 ]

5 голосов
/ 18 сентября 2011
if ( $file->{file_name} =~  m/\.(avi|divx|mkv|flv|mp4|wmv)$/i ){
     ## Download video
}
elsif($file->{file_name} =~  m/\.(mp3)$/i){
     ## Download Audio
}

Это то, что вам нужно?

4 голосов
/ 18 сентября 2011
if ($file->{file_name} =~ /\.(avi|divx|mkv|flv|mp4|mp3|wmv)$/i )
{
    if ($1 eq "mp3")
    {
        # mp3 stuff
    }
    elsif ($1 eq "mp4")
    {
       # mp4 stuff
    }
    else
    {
       # all other file types
    }
}
else
{
    # It didn't match
}

Более изощренный способ - создать хеш-код, заранее заданный типами файлов, с информацией, необходимой для вашей следующей страницы;имя файла?

my %pageHash = ( "mp3" => "mp3Page.html", "divx" => "divxPage.html", ... );
...
$file->{file_name} =~ /\.(.*)$/i;
if (exists $pageHash{$1})
{
     $page = $pageHash{$1};
}
else
{
     # unknown file extension 
}
1 голос
/ 18 сентября 2011

После того, как это сгорело, я должен посоветовать вам не объявлять переменную с условным модификатором. Если условие не выполняется, оно выполняет no часть другого предложения, что означает, что вы не объявляете $tmpl1, но, поскольку оно уже прошло строго, оно позволяет назначить неопределенную позицию в памяти.

Существует более безопасный способ сделать то, что делает ваш предшественник, который пока может проиллюстрировать решение.

my $tmpl1
    = $file->{file_name} =~ /\.(avi|divx|mkv|flv|mp4|wmv)$/i 
        ? 'download1_video.html'
        : $file->{file_name} =~ m/\.mp3$/i
            ? 'download1_audio.html'
            : 'download1.html'
    ;

Таким образом,

  1. $tmpl1 всегда объявляется
  2. $tmpl1 всегда присваивается значение
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...