Pascal Mosimann <pascal.mosimann@alternatique.ch> wrote on 05/31/2012 11:12:54 AM:

>  > Why does BackupPC run the parity command if I've told it not to by
> passing
>  > it a 0?  And how do I return to the 3.1 behavior?  According to the
>  > documentation, setting it to 0 should disable it, not cause it to run
> with
>  > a parameter of 0...  And if for some reason we would *want* the
> parity to
>  > run with a parity of 0, could we have a parameter that disables it?  
> Maybe
>  > -1?  How do you calculate *negative* parity!  :)
>
> Hi Tim,
>
> Same situation here: I don't want to run par2. Because the archive is
> done on USB drives and it takes too long.
>
> It looks between version 1.16 and 1.17 of BackupPC_archiveHost (see
>
http://backuppc.cvs.sourceforge.net/viewvc/backuppc/BackupPC/bin/
> BackupPC_archiveHost?r1=1.16&r2=1.17),
> the condition to run par2 has changed on line 157
>  From
>    ...
>    if ( $parfile != 0 ) {
>    ...
>
> to
>    ...
>    if ( length($parfile) ) {
>    ...
>
> I've modified the condition back to "if ( $parfile != 0 )" and now it
> skips the par2 execution.


Thank you for the followup!  I actually changed it to:

 if ( length($parfile) && $parfile != 0 ) {

(and sent a patch to the list that was seemingly ignored).

My perl-fu is not the greatest;  the reason why I changed it to the above is to be able to handle two conditions:  parfile set to 0, *and* the parfile parameter unset (which is the default, by the way) or set to an empty string.  Perl considers unset variables equal to an empty string, which also is equal to 0 in a comparison, but I don't like depending on such assumptions.  I'd rather the code be explicit about what it's trying to accomplish.  Maybe that makes me inelegant.

Of course, if you want elegant you could use:

 if ( $parfile ) {

because Perl will evaulate an undefined value as an empty string, and an empty string as a false, and a zero as a false.  It's certainly concise...

But like I said, my perl-fu is not the greatest, and I prefer explicit to implicit.  If this is somehow offensive to the sense of style of Perl hackers, then so be it.

And let me know:  I'd truly like to know the "right" way to construct an if statement that handles a variable that is unset, set to a null string or set to zero.  Bonus points for avoiding the warning when using -w...  The only way I've been able to handle this in other projects is something like:

$variable=0 if not defined $variable;
if ( $variable != 0 ) {

Tim Massey

 
Out of the Box Solutions, Inc.
Creative IT Solutions Made Simple!

http://www.OutOfTheBoxSolutions.com
tmassey@obscorp.com
      22108 Harper Ave.
St. Clair Shores, MI 48080
Office: (800)750-4OBS (4627)
Cell: (586)945-8796