### undef vs. \$foo = 0

by DaWolf (Curate)
 on May 02, 2002 at 14:34 UTC Need Help??
Contributed by DaWolf on May 02, 2002 at 14:34 UTC
Q&A  > input and output

#### Description:

Wich one is the best way to reset a variable?

1st method:
```foreach \$foo(@foo)
{
undef \$bar;
...
\$bar = \$some + \$thing;
}
2nd method:
```foreach \$foo(@foo)
{
\$bar = 0;
...
\$bar = \$some + \$thing;
}
TIA, DaWolf

Answer: undef vs. \$foo = 0
contributed by ariels

One sets the variable to undef, the other to 0. They're not equivalent. "Resetting" a variable is probably more like undef \$bar.

But which you want probably depends on what it is you want to do. For some applications, you'd set \$bar=0 initially (or \$bar='' for others), so that could be useful.

#### Example

To print the sum of the numbers in an array,
```my \$sum;
# ...
\$sum = 0;
\$sum += \$_ for @array;
print "Sum is \$sum\n";
Using undef \$sum would be a somewhat subtle error in this case.

Other times, you want undefinedness, and you undef things accordingly. Which is right to use depends on what is "right".

Answer: undef vs. \$foo = 0
contributed by crazyinsomniac

The best method is

```foreach \$foo(@foo)
{
\$bar = \$some + \$thing;
}
no need for an intermediary step unless you're doing something with \$bar.

If \$bar has a default value, set it to that value, otherwise undef.

Answer: undef vs. \$foo = 0
contributed by Mur

undef \$bar may have some useful side-effects, if \$bar is an object.

```\$bar = Foo->new();
...
undef \$bar;
will invoke "Foo::DESTROY", if it is defined.
```\$bar = 0;
will also invoke DESTROY, but not if '0' is a valid assignment in the "Foo" class (long shot, I know).

• Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
• Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
• Read Where should I post X? if you're not absolutely sure you're posting in the right place.
• Posts may use any of the Perl Monks Approved HTML tags:
a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
• You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
 For: Use: & & < < > > [ [ ] ]
• Link using PerlMonks shortcuts! What shortcuts can I use for linking?

Create A New User
Chatterbox?

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (5)
As of 2018-04-24 18:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My travels bear the most uncanny semblance to ...

Results (86 votes). Check out past polls.

Notices?