Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > ошибка в regexp


Автор: myth777 10.11.2011, 14:23
Всем привет, помогите разобраться что не так.
Код

#!/usr/bin/perl -w
  use strict;
    my $site = "http://habrahabr.ru/blogs/linux/120150";
    my $is_find = ($site =~ m/^http\:\/\//ig);
    print $is_find."\n";
    $site = "http://".$site  if(!$is_find);
    print $site."\n";
    my($s) = $site =~ m/(^http\:\/\/[^\/]+)/ig;
    print $s;

выдает - 
1
http://habrahabr.ru/blogs/linux/120150
Use of uninitialized value $s in print at 1.pl line 9.
собственно вот это меня и убивает.
Use of uninitialized value $s in print at 1.pl line 9.
В чем дело не пойму и что делать тоже не пойму.

Добавлено через 3 минуты и 59 секунд
Если комментирую строчки ниже, то все работает. Такое ощущение что первый regexp на проверку соответствия убивает выполнение второго, а почему - не пойму
Код

#!/usr/bin/perl -w
  use strict;
    my $site = "http://habrahabr.ru/blogs/linux/120150";
#    my $is_find = $site =~ m/^http\:\/\//ig;
#    print $is_find."\n";
#    $site = "http://".$site  if(!$is_find);
    print $site."\n";
    my($s) = $site =~ m/(^http\:\/\/[^\/]+)/ig;
    print $s;



версия perl -  
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-mult

Автор: arto 10.11.2011, 15:06
# perl
#!/usr/bin/perl -w                                                                                           
  use strict;                                                                                                
    my $site = "http://habrahabr.ru/blogs/linux/120150";                                                     
    my $is_find = ($site =~ m/^http\:\/\//i);
    print $is_find."\n";                                                                                     
    $site = "http://".$site  if(!$is_find);                                                                  
    print $site."\n";                                                                                        
    my($s) = $site =~ m/(^http\:\/\/[^\/]+)/i;
print $s;
^D
1
http://habrahabr.ru/blogs/linux/120150
http://habrahabr.ru
# 

Автор: myth777 11.11.2011, 14:32
не пойму почему модификатор /g результат убивает

Автор: arto 11.11.2011, 14:48
perldoc perlretut на предмет Global matching

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)