http://www.perlmonks.org?node_id=1029908


in reply to binary converter

perlnoobz,
I will re-write your code and explain it. I hope it makes sense and isn't more confusing to you.
#!/usr/bin/perl use strict; use warnings; # Obtain a binary string from the user or die trying print "Your binary input please => "; chomp(my $bin = <STDIN>); die "'$bin' is not binary\n" if $bin =~ /[^01]/; # Binary numbers are easier to convert right to left # We will reverse the numbers to do this my @position = reverse split //, $bin; # Now the right most value is in the first slot of the array # And the left most value is in the last slot of the array my $tot = 0; # Normally when we loop over an array, we loop over its values # In this case, looping over its indices allows us to do powers of 2 # $#position is the last index in the array for my $idx (0 .. $#position) { $tot += $position[$idx] * 2 ** $idx; # had a typo here with $digi +t[$idx] } print "\n$tot\n";

Cheers - L~R

Replies are listed 'Best First'.
Re^2: binary converter
by Jenda (Abbot) on Apr 23, 2013 at 12:20 UTC

    The position shoul be digit :-)

    In either case you do not need the index nor the ** operator.

    my @digit = reverse split //, $bin; my $num = 0; for my $bit (@digit) { $num = $num * 2 + $bit; } print "\n$num\n";

    Jenda
    Enoch was right!
    Enjoy the last years of Rome.

      Jenda,
      Or digit should have been position.

      I wouldn't have written the code I did for myself - it was intended to be more instructional since the OP indicated not understanding the for loop. I guess I should have paid closer attention (updated now). Thanks!

      Cheers - L~R