in reply to Using perlclass 'methods'
In case it helps, I ran six versions of the OP's original program on Linux, with results shown below:
# Ran this little test program on Linux with perl -v printing: # This is perl 5, version 40, subversion 0 (v5.40.0) built for x86_64- +linux use v5.40.0; use feature 'class'; use experimental 'class'; class Gear { field $chainring :param :reader; field $cog :param :reader; field $rim :param :reader; field $tire :param :reader; method ratio { return $chainring/$cog; } method gear_inches { # this one failed: # Can't locate object method "ratio" via package "self" # return (self->ratio() * $rim) + ($tire * 2); # this one also failed: # Can't locate object method "ratio" via package "self" # return (self->ratio * $rim) + ($tire * 2); # this one worked, printing: 125.909090909091 # return ($self->ratio * $rim) + ($tire * 2); # this one also worked, printing: 125.909090909091 return ($self->ratio() * $rim) + ($tire * 2); # this one failed: # Cannot invoke method "ratio" on a non-instance # return (ratio() * $rim) + ($tire * 2); # this one failed: # Can't use string ("26") as a symbol ref while "strict refs" in + use # return (ratio * $rim) + ($tire * 2); # update: this one, suggested by [hippo]++, also works # return $self->ratio * $rim + $tire * 2; } } say Gear->new(chainring=>52, cog=>11, rim=>26, tire=>1.5)->gear_inches +;
See Also
👁️🍾👍🦟
|
---|