Convert $vlength to seconds (easy), and use
grep in its scalar context:
sub btween (\%$$)
{
my ($hash, $from, $until) = @_;
return scalar(grep { $hash->{$_}->{VLENGTH} >= $from &&
$hash->{$_}->{VLENGTH} < $until }
keys(%{$hash}));
}
print "There are ", btween(%hash, 0, 60), " clips between 0-1 minutes\
+n";
(And so on and so forth)
Update: Oops, forgot the titles. Grep again:
sub btween (\%$$)
{
my ($hash, $from, $until) = @_;
my @found = grep { $hash->{$_}->{VLENGTH} >= $from &&
$hash->{$_}->{VLENGTH} < $until }
keys(%{$hash}));
my $titles = join(', ', map { $hash->{$_}->{TITLE} } @found);
return ($#found, $titles);
}
my @result = btween(%hash, 0, 60);
print "There are $result[0] clips between 0-1 minutes, and their names
+ are: $result[1]\n";
Update the second: Rewrote the update in the form of the original
sub statement. This doesn't work for
'there are n clips >5 minutes long'-type things. Change
the conditional in the
grep statement to fix this.
Andrew.