Detect letter where number was expected [closed] - perl

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
How can I detect and show an error if someone put a letter and the program expects a number?

A regexp match makes this easy. Searching for any character which isn't a numeral or an arithmetic symbol:
if ( $input =~ /[^0-9+*/-]/ ) {
print "Incorrect character detected!\n"
}
Literally anything which is a letter:
if ( $input =~ /[A-Za-z]/ ) {
print "Incorrect character detected!\n"
}

Related

how to print substring between quotes in a string in Java [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 2 years ago.
Improve this question
such string:
interface Loopback0 description "Loopback Interface for network management" ip address 10.20.30.40 255.255.255.255 no ip proxy-arp
how to print what is between " "?
Loopback Interface for network management
Assuming that the " character occurs only 2 times or if you want the first pair:
# Get the indices of the " characters
ind1 = exampleStr.find('"')
ind2 = exampleStr.find('"', ind1+1)
# Get the substring between the two indices
result = exampleStr[ind1+1:ind2]

Print a substring of an array value [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 8 years ago.
Improve this question
I have an array in the third element dataArr[2], I know it contains a 10 digit phone. I need to only read or print the first 6 digits. For instance if my phone is 8329001111, I need to print out the 832900. I tried to see if I can use substr but I keep reading or printing the full list. Do I need to dereference..
Try this :
$dataArr[2] =~ s/\s//g; # ensure there's no spaces
print substr($dataArr[2], 0, 6);
# ^ ^ ^
# variable | |
# offset start|
# |
# substring length

What does this script do in Perl? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
Can someone explain what the second half of this script does? (second line)
$self is defined elsewhere... (I know what that part does, Just wondering what the action=~... is all about/)
$action = "http://example.com/test.php";
$action = $self->{url} . ($action =~ /^\// ? "" : "/" ) . $action;
It returns an empty string if $action starts with a slash, and a slash if it does not start with a slash.

Converting single line to multiple lines in perl [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 8 years ago.
Improve this question
I have file as below.
ID || DATE || AMOUNT
XX||20130801##20130901##20131001##20131101||100##200##300##400
and I want the output as below using perl.
xx||20130801||100
xx||20130901||200
xx||20131001||300
xx||20131101||400
Please help me how to convert using perl.
perl -F'\|\||##' -lanE'$.>1 or $" ="||",next; say "#F[0,$_,$_+4]" for 1..4' file
perl -F'\|\|' -lane '#a=split(/##/,$F[1]); #b=split(/##/,$F[2]); print "$F[0]||$a[$_]||$b[$_]" foreach 0..$#a;' file
Output:
ID || DATE || AMOUNT
XX||20130801||100
XX||20130901||200
XX||20131001||300
XX||20131101||400

start condition for TeX equations [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
In lex, I can define the following starting condition for equations defined between $...$.
%x EQN1
\$ { BEGIN(EQN1); }
<EQN1>{
\$ { BEGIN(INITIAL); }
[^\$]* {}
}
For equations between $$...$$, how can I define the anything but $$ rule, such as in [^\$]*. I guess [^\$\$]* wouldn't work.
I think you don't understand the way the patterns are matched, see flex manual
Flex always try to match longest input possible. You can understand it in way, that longer rules have higher priority.
Because "\$\$" match two characters and "." just one, the example below will work just fine.
%x EQN2
\$\$ { BEGIN(EQN2); }
<EQN2>{
\$\$ { BEGIN(INITIAL); }
. {}
}
You can also replace [^\$]* {} with . {} in your example, because when rules match same size of input, the first one in lex.l has higher priority.