Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??

I have module Money/Finance.pm, within it, a sub getMovingAve is defined with protocol of ($$\@\@). I include this module in moveaverage2.pl, if I include it by 'use Money::Finance', I need call it as ($$@@), if I include it by 'require Money::Finance' I need call it as ($$\@\@), exactly matching with how its protocol is defined. Is it a bug or how to explain this difference. By the way, I run this test on HP box with Perl v5.8.8 and I have attached all both souce codes. Thanks in advance

$ cat moveaverage2.pl #!/usr/bin/perl -w #use strict; push(@Inc,'pwd'); #require Money::Finance; use Money::Finance; @values = ( 12,22,23,24,21,23,24,23,23,21,29,27,26,28 ); @mv = (0,10000); $size = scalar(@values); print "\n Values to work with = { @values } \n"; print " Number of values = $size \n"; #use strict; # ---------------------------------------------------------------- # Calculate the average of the above function # ---------------------------------------------------------------- my $cup = Money::Finance::new(); my $cup1 = new Money::Finance; $ave =Money::Finance::getLastAverage(5,$size,@values); print "\n Average of last 5 days = $ave \n"; Money::Finance::getMovingAve(5,$size,@values,@mv); print "\n Moving Average with 5 days window = \n { @mv } \n"; $ $ $ cd Money $ $ $ cat Finance.pm package Money::Finance; require Exporter; @ISA = (Exporter); @EXPORT = qw( new FutureValue PresentValue FVofAnnuity AnnuityOfFV getLastAverage getMovingAve SetInterest); # # Globals, if any # local $defaultInterest = 5.0; sub SetInterest($) { my $rate = shift(@_); $defaultInterest = $rate; printf "\n \$defaultInterest = $rate"; } # ------------------------------------------------------------------ # Notes: # 1. The interest rate $r is given in a value of [0-100]. # 2. The $n given in the terms is the rate at which the interest # is applied. # # ------------------------------------------------------------------ # ------------------------------------------------------------------ # Present value of an investment given # fv - a future value # r - rate per period # n - number of period # ------------------------------------------------------------------ sub FutureValue($$$) { my ($pv,$r,$n) = @_; my $fv = $pv * ((1 + ($r/100)) ** $n); return $fv; } # ------------------------------------------------------------------ # Present value of an investment given # fv - a future value # r - rate per period # n - number of period # ------------------------------------------------------------------ sub PresentValue($$$) { my $pv; my ($fv,$r,$n) = @_; $pv = $fv / ((1 + ($r/100)) ** $n); return $pv; } # ------------------------------------------------------------------ # Get the future value of an annuity given # mp - Monthly Payment of Annuity # r - rate per period # n - number of period # ------------------------------------------------------------------ sub FVofAnnuity($$$) { my $fv; my $oneR; my ($mp,$r,$n) = @_; $oneR = ( 1 + $r) ** $n; $fv = $mp * ( ($oneR - 1)/ $r); return $fv; } # ------------------------------------------------------------------ # Get the annuity from the following bits of information # r - rate per period # n - number of period # fv - Future Value # ------------------------------------------------------------------ sub AnnuityOfFV($$$) { my $mp; # mp - Monthly Payment of Annuity my $oneR; my ($fv,$r,$n) = @_; $oneR = ( 1 + $r) ** $n; $mp = $fv * ( $r/ ($oneR - 1)); return $mp; } # ------------------------------------------------------------------ # Get the average of the last "n" values in an array. # ------------------------------------------------------------------ # The last $count number of elements from the array in @values # The total number of elements in @values is in $number # sub getLastAverage($$@) { my ($count, $number, @values) = @_; my $i; my $a = 0; return 0 if ($count == 0); for ($i = 0; $i< $count; $i++) { $a += $values[$number - $i - 1]; } return $a / $count; } # ------------------------------------------------------------------ # Get a moving average of the values. # ------------------------------------------------------------------ # The window size is the first parameter, the number of items in the # passed array is next. (This can easily be calculated within the # function using the scalar() function, but the subroutine shown here # is also being used to illustrate how to pass pointers.) # The reference to the array of values is passed next, followed by a # reference to the place the return values are to be stored. # sub getMovingAve($$\@\@) { my ($count, $number, $values, $movingAve) = @_; my $i; my $a = 0; my $v = 0; return 0 if ($count == 0); return -1 if ($count > $number); return -2 if ($count < 2); $$movingAve[0] = 0; $$movingAve[$number - 1] = 0; for ($i=0; $i<$count;$i++) { $v = $$values[$i]; $a += $v / $count; $$movingAve[$i] = 0; } for ($i=$count; $i<$number;$i++) { $v = $$values[$i]; $a += $v / $count; $v = $$values[$i - $count - 1]; $a -= $v / $count; $$movingAve[$i] = $a; } return 0; } sub new { my $this = {}; # Create anonymous hash, and #self points to it. print "\n i am in new \n"; bless $this; # Connect the hash to the package Cocoa. return $this; # Return the reference to the hash. } 1; $

In reply to Any difference between use and require regarding honoring prototype defined for sub? by stewart_lee

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • 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
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others exploiting the Monastery: (10)
    As of 2014-10-21 16:12 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      For retirement, I am banking on:










      Results (105 votes), past polls