Solved

How to seperate and print integers in PERL

Posted on 2010-09-02
21
271 Views
Last Modified: 2012-08-14
I need some help with an assignment.  I need to input a 5 digit integer and then print the 5 numbers to the screen with a space between them.  i need some help getting this set up.  i can't use arrays or the split function.
0
Comment
Question by:PMG76
  • 11
  • 4
  • 3
  • +2
21 Comments
 
LVL 25

Expert Comment

by:clockwatcher
ID: 33592548
We can't do your homework for you.  Do you have anything started?  Take a look at the substr function:  

  perldoc -f substr
0
 

Author Comment

by:PMG76
ID: 33592616
I'm not asking anyone to do it.  i clearly stated that it was homework.  From what i gather I need to use the chop and chomp functions but I'm unsure on how to start it.,
0
 
LVL 84

Expert Comment

by:ozo
ID: 33592793
can you use the join and unpack functions?
0
 
LVL 10

Expert Comment

by:jeromee
ID: 33592804
perl -e '$_=$ARGV[0]; while( /(\d)(\d*)/ ){ print "$1 "; $_=$2 }' 12345
1 2 3 4 5

0
 
LVL 84

Expert Comment

by:ozo
ID: 33592814
Do you know how to find documentation on the chop function?
perldoc -f chop
       chop VARIABLE
       chop( LIST )
       chop    Chops off the last character of a string and returns the
               character chopped.  It is much more efficient than "s/.$//s"
               because it neither scans nor copies the string.  If VARIABLE is
               omitted, chops $_.  If VARIABLE is a hash, it chops the hash's
               values, but not its keys.

               You can actually chop anything that's an lvalue, including an
               assignment.

               If you chop a list, each element is chopped.  Only the value of
               the last "chop" is returned.

               Note that "chop" returns the last character.  To return all but
               the last character, use "substr($string, 0, -1)".


You can do a loop printing from the end of the string
0
 
LVL 10

Expert Comment

by:jeromee
ID: 33592826
if you don't want the trailing space:
perl -e '$_=$ARGV[0]; while( /(\d)(\d*)/ ){ print "$1";  print " " if $2; $_=$2 }' 12345
1 2 3 4 5
0
 
LVL 84

Expert Comment

by:ozo
ID: 33592842
print "$1 " while s/(\d)//
#or
print join" ",/\d/g
0
 

Author Comment

by:PMG76
ID: 33592851
I can't use arrays
0
 
LVL 84

Expert Comment

by:ozo
ID: 33592878
does that mean you can't use @ARGV to get arguments from the command line?
does that mean you can't use lists?
0
 

Author Comment

by:PMG76
ID: 33592879
This is where I am right now but it's clearly not working.


use warnings;
use strict;
print "\n";
print 'Enter a five digit number: ' ;
my $num = <>;
##chop $num;
##my $saveme = chop $num;
##print "$num   ";
##perl -e '$_=$ARGV[0]; while( /(\d)(\d*)/ ){ print "$1";  print "   " if $2; $_=$2 }' $num;
print join"    ",/\d/g;
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 84

Expert Comment

by:ozo
ID: 33592941
> I can't use arrays
do you need help to overcome a difficulty you are having with using arrays?
0
 
LVL 84

Expert Comment

by:ozo
ID: 33592980
the shift function can get a value from @ARGV without explicitly naming it,
but it still uses it implicitly.
<> also uses @ARGV implicitly.
You might avoid that by using <STDIN> instead
0
 
LVL 84

Expert Comment

by:ozo
ID: 33592998
// by default operates on $_
you can either do
$num =~ /\d/g
or
$_ = <>;
(unless you are trying to avoid using @ARGV)
0
 
LVL 5

Expert Comment

by:vikaskhoria
ID: 33594001
try this code, simply replace each digit with the digit + a space!


use warnings;

use strict;

print "\n";

print 'Enter a five digit number: ' ;

my $num = <>;



$num ~= s/\d/$1 /g;

print $num;





### Or you can also do this:

$num ~= s/\d/$1 /g;

$num ~= s/ $//;  ## To remove the last space added in previous line

or

chomp($num); ## To remove the last space added in previous line



print $num;

Open in new window

0
 
LVL 84

Accepted Solution

by:
ozo earned 250 total points
ID: 33594183
you probably meant
$num =~ s/(\d)/$1 /g;
and
chop($num)

more simply
perl -pe "s// /g"
or to avoid extra space at the end
perl -pe "s/\B/ /g"
0
 
LVL 84

Expert Comment

by:ozo
ID: 33594184
you probably meant
$num =~ s/(\d)/$1 /g;
and
chop($num)

more simply
perl -pe "s// /g"
or to avoid extra space at the end
perl -pe "s/\B/ /g"
0
 

Author Comment

by:PMG76
ID: 33595642
Ok.  i got it to print the numbers seperately now but i need them to print with 3 spaces between each number.  How do i accompkish this:

#!/usr/bin/perl
use warnings;
use strict;
print "\n";
print 'Enter a five digit number: ' ;
my $num = <>;

$num =~ s/(\d)/$1 /g;
chop($num);

print "$num   \n";

0
 
LVL 10

Assisted Solution

by:jeromee
jeromee earned 250 total points
ID: 33596523
#!/usr/bin/perl
use warnings;
use strict;
print "\n";
print 'Enter a five digit number: ' ;
my $num = <>;

$num =~ s/(\d)/$1   /g;    #<<<< add 3 spaces here
chop($num);

print "$num\n";
0
 
LVL 5

Expert Comment

by:vikaskhoria
ID: 33596773
Yeah I am sorry about the chomp - its a chop.
Thanks OZO

PMG76 :

3 instead of one is simple, right??

Just replace one space with 3!! :)
Like this:

$num =~ s/(\d)/$1   /g;

or you can also do this, I guess:
$num =~ s/(\d)/$1 {3}/g;

0
 
LVL 84

Expert Comment

by:ozo
ID: 33602276
s/(\d)/$1 {3}/g;
does not work
you could do
s/(\d)/$1." "x3/eg;
or
s/(\d)/$1@{[" "x3]}/g;
but it seems like a silly way to do it.


$num =~ s/(\d)/$1   /g;    #<<<< add 3 spaces here
chop($num);
leaves two spaces at the end if $num originally ended with a digit,
or if it originally ended with  non-digit, it would remove that character.
0
 
LVL 84

Expert Comment

by:ozo
ID: 33602279
#!/usr/bin/perl
use warnings;
use strict;
#another way
$/=\1;
$\=" "x3;
print while <>;
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Sampling 3 39
Random Variable 2 38
Get a Perl script to return content from a module 7 62
calendar source - options.. 10 38
Foreword (May 2015) This web page has appeared at Google.  It's definitely worth considering! https://www.google.com/about/careers/students/guide-to-technical-development.html How to Know You are Making a Difference at EE In August, 2013, one …
Article by: Nicole
This is a research brief on the potential colonization of humans on Mars.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This video discusses moving either the default database or any database to a new volume.

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now