range_map.pl 477 B

12345678910111213141516
  1. #!/usr/bin/perl
  2. # Map a given value from a given range into another range.
  3. use 5.010;
  4. use strict;
  5. use warnings;
  6. sub range_map {
  7. my ($value, $in_min, $in_max, $out_min, $out_max) = @_;
  8. ($value - $in_min) * ($out_max - $out_min) / ($in_max - $in_min) + $out_min;
  9. }
  10. say range_map(5, 1, 10, 0, 4); #=> 1.777... (maps the value 5 from range [1, 10] to range [0, 4])
  11. say range_map(9, 1, 10, 1, 5); #=> 4.555... (maps the value 9 from range [1, 10] to range [1, 5])