Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Perl program to search files

by Athanasius (Bishop)
on Dec 26, 2018 at 04:31 UTC ( #1227700=note: print w/replies, xml ) Need Help??


in reply to Perl program to search files

Hello harangzsolt33,

One thing I notice is that your sub RSPACE is essentially duplicating part of the functionality already present in Perl’s printf and sprintf builtin functions. In fact, your functions RSPACE and PRINT can be removed altogether, and the two places where PRINT is called can be written as follows:

# (1) in sub SearchFile: PRINT("FOUND: $FULLNAME"); # original printf " %-8dFOUND: %s\n", $TOTAL, $FULLNAME; # replacement # (2) in sub CheckDIR: if ($VERBOSE) { PRINT("SEARCHING: ", FormatPath($PATH)); } + # original printf " %-8dSEARCHING: %s\n", $TOTAL, FormatPath($PATH) if $VERBOSE; + # replacement

Note the use of a statement mofifier in the second case. In general, statement modifiers should be preferred over compound statements whenever a single statement is involved, as this simplifies the code.

Some of your coding conventions could also be improved (IMHO):

  • The use of all-uppercase variable names should be reserved for constants.
  • Magic numbers (even ASCII values) should be replaced by constants:
    use Const::Fast; const my $ASTERISK => 42; const my $DOT => 46; const my $QUESTION => 63; # etc.
  • In a script intended to be called directly from the command line, and not used as a module, the distinction between “public” and “private” functions is pointless. (Conversely, if the script is intened to be called as a module, it should begin with an appropriate package declaration.)

I haven’t studied your code in detail. Overall, it looks good: well thought-out and implemented.

Regarding posting:
(1) It would be better to include your code in the question itself (inside <readmore> tags!) than to provide a web address, as the latter is likely to become invalid and so render this thread incomprehensible to future readers.
(2) You say you have tested the program. Adding your test code (again, in <readmore> tags, of course) would aid the monks in evaluating your code.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Perl program to search files
by Tux (Abbot) on Dec 28, 2018 at 13:18 UTC

    Note the use of a statement modifier in the second case. In general, statement modifiers should be preferred over compound statements whenever a single statement is involved, as this simplifies the code.

    I STRONGLY oppose to this statement. This might be true for you, but I personally hate statement modifiers used for this, as it causes me to read code backwards, which is a maintenance nightmare.

    IF simplification to one-liners is required, I use it the other way round (TIMTOWTDI)

    if ($VERBOSE) { PRINT ("SEARCHING: ", FormatPath ($PATH)); } + # original $VERBOSE and printf "" %-8dSEARCHING: %s\n", $TOTAL, FormatPath ($PATH +); # Readable and understandable printf " %-8dSEARCHING: %s\n", $TOTAL, FormatPath ($PATH) if $VERBOSE; + # unmaintanable

    Enjoy, Have FUN! H.Merijn

      Agree. This seems to be a matter of personal taste as indicated by the discussion at: A matter of style: how to perform a simple action based on a simple condition?

      In addition to preferring block-if to postfix-if I always use the multi-line form of block-if. Why? Consider changing:

      if ($VERBOSE) { PRINT("SEARCHING ..."); }
      to:
      if ($VERBOSE) { # Do something else here ... or just add a clarifying comment PRINT("SEARCHING ..."); }
      With multi-line block-if that's an easy to understand one line change and easier to understand at a glance when looking at the change history of the file in version control. OTOH, with postfix-if, adding a second statement to the if condition requires making more and harder-to-understand code changes.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2019-11-16 23:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Strict and warnings: which comes first?



    Results (85 votes). Check out past polls.

    Notices?