in reply to simple "if.. elsif.. else.." statements, trying "for.. if.." too

Additionally, this:
for ($os_arch) { if ("x86_64") { print "OS Arch x86_64 : $os_arch\n"; $os_arch_bits = '64'; print "OS Arch bits 1 : $os_arch_bits\n"; }

is the same as:

for ($os_arch) { if (1) { # <------------------------------------------ print "OS Arch x86_64 : $os_arch\n"; $os_arch_bits = '64'; print "OS Arch bits 1 : $os_arch_bits\n"; }

Therefore, the 1st "if" will always be true. None of the "else" clauses will be evaluated. You don't need the for loop:

if ($os_arch eq "x86_64") { print "OS Arch x86_64 : $os_arch\n"; $os_arch_bits = '64'; print "OS Arch bits 1 : $os_arch_bits\n"; } elsif ($os_arch eq "i386") { print "OS Arch i386 : $os_arch\n"; $os_arch_bits = '32'; print "OS Arch bits 2 : $os_arch_bits\n"; } elsif ($os_arch eq "i686") { print "OS Arch 64 : $os_arch\n"; $os_arch_bits = '32'; print "OS Arch bits 3 : $os_arch_bits\n"; } else { print "OS Arch 64 : $os_arch\n"; $os_arch_bits = 'XX'; print "OS Arch bits 4 : $os_arch_bits\n"; }

See also Switch statements

use strict and warnings

Replies are listed 'Best First'.
Re^2: simple "if.. elsif.. else.." statements, trying "for.. if.." too
by JBzh (Initiate) on May 18, 2012 at 13:43 UTC
    I usually use switch when coding in other langages. I can't find the website were I read this strange for loop. Thank you, I'll search in the switch doc.

      What you probably saw was:

      for ($os_arch) { if (/x86_64/) {

      Which is short for:

      for my $os_type ($os_arch) { if ($os_type =~ m/x86_64/) {

      I imagine you wanted this:

      for ($os_arch) { when ("x86_64") { ... } ... }

      Or:

      given ($os_arch) { when ("x86_64") { ... } ... }
      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'