print &gender
вызывает функцию пола и печатает то, что возвращает. Сам пол, как последнее, что он делает в любой ветке, печатает строку. Неявно, он возвращает результат последнего выражения в нем (печать "MALE" или печать "FEMALE"), и print, когда это успешно, возвращает 1.
Так что либо сделайте это:
sub gender { if ( rand(100) >= 50 ) {print "MALE ";} else {print "FEMALE";}}
foreach (1..5) { &gender(); print "\n"; }
или это:
sub gender { if ( rand(100) >= 50 ) {return "MALE ";} else {return "FEMALE";}}
foreach (1..5) { print &gender(), "\n"; }
Также обратите внимание, что &gender
, с & без скобок, является особой формой вызова функции, которая обычно не является тем, что люди хотят использовать; или удалите & или добавьте пустые скобки к вашему звонку.
Я также исправил тест if, чтобы он возвращал мужчин 50% времени и женщин 50% времени вместо 49% и 51% соответственно.