[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 284
  • Last Modified:

How to seperate and print integers in PERL

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
PMG76
Asked:
PMG76
  • 11
  • 4
  • 3
  • +2
2 Solutions
 
clockwatcherCommented:
We can't do your homework for you.  Do you have anything started?  Take a look at the substr function:  

  perldoc -f substr
0
 
PMG76Author Commented:
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
 
ozoCommented:
can you use the join and unpack functions?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

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

0
 
ozoCommented:
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
 
jeromeeCommented:
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
 
ozoCommented:
print "$1 " while s/(\d)//
#or
print join" ",/\d/g
0
 
PMG76Author Commented:
I can't use arrays
0
 
ozoCommented:
does that mean you can't use @ARGV to get arguments from the command line?
does that mean you can't use lists?
0
 
PMG76Author Commented:
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
 
ozoCommented:
> I can't use arrays
do you need help to overcome a difficulty you are having with using arrays?
0
 
ozoCommented:
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
 
ozoCommented:
// by default operates on $_
you can either do
$num =~ /\d/g
or
$_ = <>;
(unless you are trying to avoid using @ARGV)
0
 
vikaskhoriaCommented:
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
 
ozoCommented:
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
 
ozoCommented:
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
 
PMG76Author Commented:
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
 
jeromeeCommented:
#!/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
 
vikaskhoriaCommented:
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
 
ozoCommented:
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
 
ozoCommented:
#!/usr/bin/perl
use warnings;
use strict;
#another way
$/=\1;
$\=" "x3;
print while <>;
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 11
  • 4
  • 3
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now