• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 153
  • Last Modified:

lowerCase to Uppercase

How to use the s/// operator and substitute the words in the line beginning with lowercase to uppercase.
I guess it should be in some of the books but I think I missed it somehow.
0
sstouk
Asked:
sstouk
  • 5
  • 2
  • 2
  • +2
1 Solution
 
ddaCommented:
Possible solution, may be not the better one:

$var =~ s/^(.)/\u$1/;
0
 
ddaCommented:
sstouk, please ignore my previous comment, it will replace only the first char of the line. More likely you want the following:

$var =~ s/^(\w+)/\U$1/g;

0
 
ozoCommented:
I'm not sure I understand what you mean.  
Do you want to substutute only the beginning letter of each word?
or do you want to substitute the entire word depending on the case of its beginning letter?
0
Technology Partners: 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!

 
amitpagarwalCommented:
you need to read one file and write it to another file. Both things can't be done at the same time.

open (readingfile)
open (writingfile)

read one line of readingfile in $line

$line =~ tr/^[A..Z]/[a..z]/

print $line in writingfile

- Thanks

0
 
sstoukAuthor Commented:
Adjusted points to 75
0
 
sstoukAuthor Commented:
I need not the tr/// operator to do it, but the s/// operator as stated in the question.

Example:
Input:
"this Is the _line with_Some lower Case.rar"
Output:
"This_Is_The_Line_With_Some_Lower_Case.rar"

That's what I try to archieve.
I have a script that can substitute the spaces in the filename to the underscores and substitute the unaccepted charachters, but I need also to make the beginning of each word in the filename as Uppercase.

I tested dda's coment and it only replaces the first word completely to uppercase.

I don't need the tr/// operator as there are some "(,),-,_ in the beginning of words and I need only forst letters of each word to be uppercase.
0
 
thoellriCommented:
You could use this:

$string="this Is the _line with_Some lower Case.rar";
$string=~s/(\w+)/ucfirst($1)/eg;
print $string,"\n";

however "_" is considered a word character and I think you only want alpha-characters, so use:

$string=~s/([A-Z]+)/ucfirst($1)/egi;


hope this helps
  Tobias
0
 
sstoukAuthor Commented:
Perfect Answer!

Thank You very much!
0
 
sstoukAuthor Commented:
I tested it and it works OK as this:
$string=~s/([A-Z]+)/ucfirst($1)/egi;


and as this:
$string=~s/([a-z]+)/ucfirst($1)/eg;


0
 
thoellriCommented:
errr - thanks, and you second solution is the "perfect" answer. What did I think when i posted mine?

Too early in the morning :-)
  Tobias
0
 
ozoCommented:
#That would capitalise the .Rar, which sstouk's example did not want.
#(you also don't need the /e)
$string=~s/([a-z.]+)/\u$1/gi;

0
 
sstoukAuthor Commented:
I admit the ozo's answer worked from the first time as I don't have to make several s/// operator lines for files with the Absolute Path.
The first suggestion would do OK though and as a compensation for a better option here's the link
http://24.112.136.42
With the result of your suggestions in work.
please don't break my computer. I have just started studying Perl.
 :)
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

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