sub isleap { my ($year) = @_; return 1 if (( $year % 400 ) == 0 ); # 400's are leap return 0 if (( $year % 100 ) == 0 ); # Other centuries are not return 1 if (( $year % 4 ) == 0 ); # All other 4's are leap return 0; # Everything else is not } #### not $year % 4 xor $year % 100 xor $year % 400; #### print $_, ((not $_ % 4 xor $_ % 100 xor $_ % 400) ? ' is ' : ' is not ', 'a leap year'), $/ for 1996, 1997, 1998, 1999, 2000, 2004, 2100; 1996 is a leap year 1997 is not a leap year 1998 is not a leap year 1999 is not a leap year 2000 is a leap year 2004 is a leap year 2100 is not a leap year