Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

simple "if.. elsif.. else.." statements, trying "for.. if.." too

by JBzh (Initiate)
on May 18, 2012 at 12:08 UTC ( [id://971291]=perlquestion: print w/replies, xml ) Need Help??

JBzh has asked for the wisdom of the Perl Monks concerning the following question:

Good afternoon. I'm learning perl, and confused by a simple code which prints :

Arch bits : OS Arch x86_64 : i686 OS Arch bits 1 : 64 OS Arch bits: 64 Now using for/if OS Arch x86_64 : i686 OS Arch bits 1 : 64

instead of :

Arch bits : OS Arch x86_64 : i686 OS Arch bits 3 : 32 OS Arch bits: 32 Now using for/if OS Arch x86_64 : i686 OS Arch bits 3 : 32

Code is as follow :

#!/usr/bin/perl print "Arch bits : $os_arch_bits\n"; #$os_arch = `uname -m`; #$os_arch =~ s/\n//g; #$os_arch =~ s/\r//g; $os_arch = 'i686'; if ($os_arch == '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 == 'i386') { print "OS Arch i386 : $os_arch\n"; $os_arch_bits = '32'; print "OS Arch bits 2 : $os_arch_bits\n"; } elsif ($os_arch == '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"; } print "OS Arch bits: $os_arch_bits\n"; print "Now using for/if\n"; 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"; } elsif ("i386") { print "OS Arch i386 : $os_arch\n"; $os_arch_bits = '32'; print "OS Arch bits 2 : $os_arch_bits\n"; } elsif ("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"; } }
Help will be appreciated :)

Replies are listed 'Best First'.
Re: simple "if.. elsif.. else.." statements, trying "for.. if.." too
by toolic (Bishop) on May 18, 2012 at 12:24 UTC
    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

      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'
Re: simple "if.. elsif.. else.." statements, trying "for.. if.." too
by Anonymous Monk on May 18, 2012 at 12:13 UTC
    Wrong operator, see perlop. Had you enabled warnings, then Perl would alert you to your mistake.
    $os_arch eq 'x86_64'
      it works, thank you :)
Re: simple "if.. elsif.. else.." statements, trying "for.. if.." too
by LanX (Saint) on May 18, 2012 at 23:35 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://971291]
Approved by marto
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-03-28 19:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found