Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^3: Generate the perl sequence 1, 11, 111, ....

by matrixmadhan (Beadle)
on Oct 10, 2008 at 08:24 UTC ( #716386=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Generate the perl sequence 1, 11, 111, ....
in thread Generate the perl sequence 1, 11, 111, ....

Hello all, This is my very first post/reply to perlmonks.org :)

my $one_literal = "1"; my $counter = 1; while ( 1 ) { for ( my $i = 1; $i <= $counter; $i++ ) { printf "$one_literal"; } printf "\n"; $counter++; }


Comment on Re^3: Generate the perl sequence 1, 11, 111, ....
Download Code
Re^4: Generate the perl sequence 1, 11, 111, ....
by ikegami (Pope) on Oct 11, 2008 at 00:24 UTC
    Do you mind if I offer a critique? There are a few minor points that could be improved.
    • If all that $one_literal can contain is "1", then the variable isn't needed.
      If $one_literal can contain something other than "1", then it's misnamed.

    • Speaking of being misnamed, $one_literal doesn't contain a literal. It contains a string. String literals are pieces of source code that get compiled into strings. They don't exist anywhere but in source code.

    • The first argument of printf is a formatting string. Using it to print arbitrary string is a trap waiting to be sprung. Instead, use print or printf('%s', ...).

    • The C syntax for "for" loops (for ( my $i = 1; $i <= $counter; $i++ )) is much more complex than alternative syntax Perl provides (for my $i ( 1..$counter )). That makes it more error-prone and harder to parse mentally (small variations will be obscured).

      No, I don't mind at all. In fact, I would be glad to correct my mistakes and improve perl coding.

      "That makes it more error-prone" - Did you mean the C style for loop syntax. I don't understand why that would be error-prone ?

        I don't understand why that would be error-prone ?

        Simply put, the more code you have, the higher the possibility of including an error.

        Especially in this case, where there are many symbols packed into a small area and where there are many different common usage of the loop (start at zero, start at one, stop at X, stop before X, etc).

        By making it easier to read, it can do nothing but help.

      I would agree with the printf being a trap without a formatting string. However I would disagree that C-style for loops are more error-prone than the double-dot operator. I disagree, however, that c-style loops are harder to understand.

      I personally find it much harder to mentally parse the for my $i ( 1 .. $counter ) because it forces me to remember whether the .. operator is a toggle or a list generator, and then I have to wonder if list generation is less efficient than the C-style comparison and increment operators.

        C-style loops typically involve 3 variables, 3 operators plus "my" and 2 constants.
        Perl-style loops typically involve 1 variable, 0 operators plus "my" and 2 constants.

        Aside from the studies showing a relation between code length and the chance of there being a bug, aside from my personal experience of C-style loops being one of the biggest source of bugs, I don't see how you can argue that something that has so many more elements to parse is easier to read.

        it forces me to remember whether the .. operator is a toggle or a list generator

        Well that's simple. The .. operator is always used to generate a list.

Re^4: Generate the perl sequence 1, 11, 111, ....
by blazar (Canon) on Oct 11, 2008 at 11:11 UTC
    Hello all, This is my very first post/reply to perlmonks.org :)

    I personally believe, then, in addition to the Perl-specific points addressed by ikegami (which I was about to point out myself...) that as a behavioural rule you should have posted your reply not as a comment to a more or less random entry of this thread, but as one to the root node because it anwers the latter not the former.

    --
    If you can't understand the incipit, then please check the IPB Campaign.
      Please pardon my ignorance. Only after replying to another reply - I realized that I should not have done that instead it should have been a direct reply. In most of the forums there isn't any concept of direct/indirect replies, so I was not aware of that. Next time, I will make sure about direct or indirect reply accordingly before posting. Sorry again.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://716386]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (8)
As of 2014-10-23 08:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (125 votes), past polls