Forum Webscript.Ru
Программирование => Perl => Тема начата: woolfs от 15 Апреля 2008, 07:47:32
-
Добрый день!
Портирую функционал с Perl под .Net
Во всех ньюансах Perl, еще слабо разбираюсь.
Прошу объяснить на псевдокоде смысл следующей конструкции:
$$ngram{substr($word,$i,4)}++ if $len > 3;
где ngram это хэш, а $len=length($word);
В конструкции непонятен смысл постфиксного условия if
и чем будет отличаться идея, если бы он стоял в начале конструкции?
-
он был бы синтаксически неверен.
правильно:
if ($len > 3) {
$$ngram{substr($word,$i,4)}++;
}
-
спасибо за отклик, но этот пример работает :
вот более полный фрагмент
my $t1 = new Benchmark;
my $ngram;
($_,$ngram) = @_; #$ngram contains reference to the hash we build
# then add the ngrams found in each word in the hash
my $word;
foreach $word (split("[$non_word_characters]+")) {
$word = "_" . $word . "_";
print "\\ntest=".$word;
my $len = length($word);
my $flen=$len;
my $i;
for ($i=0;$i<$flen;$i++) {
$$ngram {substr($word,$i,5)}++ if $len > 4;
$$ngram{substr($word,$i,4)}++ if $len > 3;
$$ngram{substr($word,$i,3)}++ if $len > 2;
$$ngram{substr($word,$i,2)}++ if $len > 1;
$$ngram{substr($word,$i,1)}++;
$len--;
}
}
-
попробуйте if ($len > 3) $$ngram{substr($word,$i,4)}++;
-
И так и так будет работать - разницы никакой.
if $len > 3;
Просто чтобы не городить цикл for или if в той же строке пишут в конце условие, например:
$forconst{$u} = [$y[$_]] for $_ 1..10;
-
неужели?
# perl -l
my $t = 1;
if ($t == 1) print "yes!";
^D
syntax error at - line 2, near ") print"
Execution of - aborted due to compilation errors.
#
-
Да ни... если if ставить в начале, то оформлять нужно так:
if ($t == 1) {print "yes!";}
-
и чем отличается от того, что я написал?
-
arto:
и чем отличается от того, что я написал?
Тем, что мой пример работать будет и error не выдаст:)