1*2bcacabbSAdam Hornacek#!/usr/bin/perl 2*2bcacabbSAdam Hornacek 3*2bcacabbSAdam Hornacek# 4*2bcacabbSAdam Hornacek# CDDL HEADER START 5*2bcacabbSAdam Hornacek# 6*2bcacabbSAdam Hornacek# The contents of this file are subject to the terms of the 7*2bcacabbSAdam Hornacek# Common Development and Distribution License (the "License"). 8*2bcacabbSAdam Hornacek# You may not use this file except in compliance with the License. 9*2bcacabbSAdam Hornacek# 10*2bcacabbSAdam Hornacek# See LICENSE.txt included in this distribution for the specific 11*2bcacabbSAdam Hornacek# language governing permissions and limitations under the License. 12*2bcacabbSAdam Hornacek# 13*2bcacabbSAdam Hornacek# When distributing Covered Code, include this CDDL HEADER in each 14*2bcacabbSAdam Hornacek# file and include the License file at LICENSE.txt. 15*2bcacabbSAdam Hornacek# If applicable, add the following below this CDDL HEADER, with the 16*2bcacabbSAdam Hornacek# fields enclosed by brackets "[]" replaced with your own identifying 17*2bcacabbSAdam Hornacek# information: Portions Copyright [yyyy] [name of copyright owner] 18*2bcacabbSAdam Hornacek# 19*2bcacabbSAdam Hornacek# CDDL HEADER END 20*2bcacabbSAdam Hornacek# 21*2bcacabbSAdam Hornacek 22*2bcacabbSAdam Hornacek# 23*2bcacabbSAdam Hornacek# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. 24*2bcacabbSAdam Hornacek# Portions Copyright (c) 2017, Chris Fraire <cfraire@me.com>. 25*2bcacabbSAdam Hornacek# 26*2bcacabbSAdam Hornacek 27*2bcacabbSAdam Hornacekuse warnings; 28*2bcacabbSAdam Hornacek 29*2bcacabbSAdam Hornacek use DBI; 30*2bcacabbSAdam Hornacek 31*2bcacabbSAdam Hornacek my $database='dbi:DB2:sample'; 32*2bcacabbSAdam Hornacek my $user=''; 33*2bcacabbSAdam Hornacek my $password=''; 34*2bcacabbSAdam Hornacek 35*2bcacabbSAdam Hornacek my $dbh = DBI->connect($database, $user, $password) 36*2bcacabbSAdam Hornacek or die "Can't connect to $database: $DBI::errstr"; 37*2bcacabbSAdam Hornacek 38*2bcacabbSAdam Hornacek my $sth = $dbh->prepare( 39*2bcacabbSAdam Hornacek q{ SELECT firstnme, lastname 40*2bcacabbSAdam Hornacek FROM employee } 41*2bcacabbSAdam Hornacek ) 42*2bcacabbSAdam Hornacek or die "Can't prepare statement: $DBI::errstr"; 43*2bcacabbSAdam Hornacek 44*2bcacabbSAdam Hornacek my $rc = $sth->execute 45*2bcacabbSAdam Hornacek or die "Can't execute statement: $DBI::errstr"; 46*2bcacabbSAdam Hornacek 47*2bcacabbSAdam Hornacek print "Query will return $sth->{NUM_OF_FIELDS} fields.\n\n"; 48*2bcacabbSAdam Hornacek print "$sth->{NAME}->[0]: $sth->{NAME}->[1]\n"; 49*2bcacabbSAdam Hornacek 50*2bcacabbSAdam Hornacek while (($firstnme, $lastname) = $sth->fetchrow()) { 51*2bcacabbSAdam Hornacek print "$firstnme: $lastname\n"; 52*2bcacabbSAdam Hornacek } 53*2bcacabbSAdam Hornacek 54*2bcacabbSAdam Hornacek # check for problems which may have terminated the fetch early 55*2bcacabbSAdam Hornacek warn $DBI::errstr if $DBI::err; 56*2bcacabbSAdam Hornacek 57*2bcacabbSAdam Hornacek $sth->finish; 58*2bcacabbSAdam Hornacek $dbh->disconnect; 59*2bcacabbSAdam Hornacek 60*2bcacabbSAdam Hornacek=item snazzle($) 61*2bcacabbSAdam Hornacek 62*2bcacabbSAdam HornacekThe snazzle() function will behave in the most spectacular 63*2bcacabbSAdam Hornacekform that you can possibly imagine, not even excepting 64*2bcacabbSAdam Hornacekcybernetic pyrotechnics. 65*2bcacabbSAdam Hornacek 66*2bcacabbSAdam Hornacek=cut back to the compiler, nuff of this pod stuff! 67*2bcacabbSAdam Hornacek 68*2bcacabbSAdam Hornaceksub snazzle($) { 69*2bcacabbSAdam Hornacekmy $thingie = shift; 70*2bcacabbSAdam Hornacek} 71*2bcacabbSAdam Hornacek 72*2bcacabbSAdam Hornacekmy $x; 73*2bcacabbSAdam Hornacek$x=12345; # integer 74*2bcacabbSAdam Hornacek$x=-54321; # negative integer 75*2bcacabbSAdam Hornacek$x=12345.67; # floating point 76*2bcacabbSAdam Hornacek$x=6.02E23; # scientific notation 77*2bcacabbSAdam Hornacek$x=0xffff; # hexadecimal 78*2bcacabbSAdam Hornacek$x=0377; # octal 79*2bcacabbSAdam Hornacek$x=4_294_967_296; # underline for legibility 80*2bcacabbSAdam Hornacek 81*2bcacabbSAdam Hornacek# 82*2bcacabbSAdam Hornacek# The following should be marked-up in the same manner as for all sigiled 83*2bcacabbSAdam Hornacek# identifiers. 84*2bcacabbSAdam Hornacek# 85*2bcacabbSAdam Hornacek$s = $var; 86*2bcacabbSAdam Hornacek$s = \$var; 87*2bcacabbSAdam Hornacek$s = ${var}; 88*2bcacabbSAdam Hornacek 89*2bcacabbSAdam Hornacek# 90*2bcacabbSAdam Hornacek# include "<<EOF" examples from 91*2bcacabbSAdam Hornacek# https://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators 92*2bcacabbSAdam Hornacek# 93*2bcacabbSAdam Hornacek 94*2bcacabbSAdam Hornacekprint <<EOF; 95*2bcacabbSAdam HornacekThe price is $Price. 96*2bcacabbSAdam HornacekEOF 97*2bcacabbSAdam Hornacekprint << "EOF"; # same as above 98*2bcacabbSAdam HornacekThe price is $Price. 99*2bcacabbSAdam HornacekEOF 100*2bcacabbSAdam Hornacek 101*2bcacabbSAdam Hornacekmy $cost = <<'VISTA'; # hasta la ... 102*2bcacabbSAdam HornacekThat'll be $10 please, ma'am. 103*2bcacabbSAdam HornacekVISTA 104*2bcacabbSAdam Hornacek$cost = <<\VISTA; # Same thing! 105*2bcacabbSAdam HornacekThat'll be $10 please, ma'am. 106*2bcacabbSAdam HornacekVISTA 107*2bcacabbSAdam Hornacek 108*2bcacabbSAdam Hornacekprint << `EOC`; # execute command and get results 109*2bcacabbSAdam Hornacekecho hi there 110*2bcacabbSAdam HornacekEOC 111*2bcacabbSAdam Hornacek 112*2bcacabbSAdam Hornacekif ($some_var) { 113*2bcacabbSAdam Hornacek print <<~EOF; 114*2bcacabbSAdam Hornacek This is a here-doc 115*2bcacabbSAdam Hornacek EOF 116*2bcacabbSAdam Hornacek} 117*2bcacabbSAdam Hornacek 118*2bcacabbSAdam Hornacekprint <<~EOF; 119*2bcacabbSAdam Hornacek This text is not indented 120*2bcacabbSAdam Hornacek This text is indented with two spaces 121*2bcacabbSAdam Hornacek This text is indented with two tabs 122*2bcacabbSAdam HornacekEOF 123*2bcacabbSAdam Hornacek 124*2bcacabbSAdam Hornacekprint <<~ 'EOF'; 125*2bcacabbSAdam Hornacek This text is not indented 126*2bcacabbSAdam Hornacek This text is indented with two spaces 127*2bcacabbSAdam Hornacek This text is indented with two tabs 128*2bcacabbSAdam HornacekEOF 129*2bcacabbSAdam Hornacek 130*2bcacabbSAdam Hornacekprint <<"foo", <<"bar"; # you can stack them 131*2bcacabbSAdam HornacekI said foo. 132*2bcacabbSAdam Hornacekfoo 133*2bcacabbSAdam HornacekI said bar. 134*2bcacabbSAdam Hornacekbar 135*2bcacabbSAdam Hornacek 136*2bcacabbSAdam Hornacekmyfunc(<< "THIS", 23, <<'THAT'); 137*2bcacabbSAdam HornacekHere's a line or 138*2bcacabbSAdam Hornacektwo 139*2bcacabbSAdam HornacekTHIS 140*2bcacabbSAdam Hornacekand here's another. 141*2bcacabbSAdam HornacekTHAT 142*2bcacabbSAdam Hornacek 143*2bcacabbSAdam Hornacek# 144*2bcacabbSAdam Hornacek# Include some samples for the shortcut // syntax of m// 145*2bcacabbSAdam Hornacek# 146*2bcacabbSAdam Hornacek 147*2bcacabbSAdam Hornacek$var =~ /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ && print; 148*2bcacabbSAdam Hornacek$var !~/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ && print; 149*2bcacabbSAdam Hornacek/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ && print; 150*2bcacabbSAdam Hornacek(/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) && print; 151*2bcacabbSAdam Hornacekif (/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) { print; } 152*2bcacabbSAdam Hornacekif (1 && /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) { print; } 153*2bcacabbSAdam Hornacekif (0 || /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) { print; } 154*2bcacabbSAdam Hornacekprint or/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 155*2bcacabbSAdam Hornacekprint if /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 156*2bcacabbSAdam Hornacekprint unless 157*2bcacabbSAdam Hornacek 158*2bcacabbSAdam Hornacek 159*2bcacabbSAdam Hornacek /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 160*2bcacabbSAdam Hornacek 161*2bcacabbSAdam Hornacekmy @o = $contents =~ 162*2bcacabbSAdam Hornacek 163*2bcacabbSAdam Hornacek 164*2bcacabbSAdam Hornacek /^(?>\S+) \s* := \s* LINKSRC \s* = \s* \S+/mxg; 165*2bcacabbSAdam Hornacek 166*2bcacabbSAdam Hornacekforeach my $v (@o) { # This loop shouldn't mistakenly be inside the previous m// 167*2bcacabbSAdam Hornacek print $v; 168*2bcacabbSAdam Hornacek} 169*2bcacabbSAdam Hornacek 170*2bcacabbSAdam Hornacek# 171*2bcacabbSAdam Hornacek# The following table is from 172*2bcacabbSAdam Hornacek# https://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators . 173*2bcacabbSAdam Hornacek# The samples following are generated per the table. 174*2bcacabbSAdam Hornacek# 175*2bcacabbSAdam Hornacek# Customary Generic Meaning Interpolates 176*2bcacabbSAdam Hornacek# '' q{} Literal no 177*2bcacabbSAdam Hornacek# "" qq{} Literal yes 178*2bcacabbSAdam Hornacek# `` qx{} Command yes* 179*2bcacabbSAdam Hornacek# qw{} Word list no 180*2bcacabbSAdam Hornacek# // m{} Pattern match yes* 181*2bcacabbSAdam Hornacek# qr{} Pattern yes* 182*2bcacabbSAdam Hornacek# s{}{} Substitution yes* 183*2bcacabbSAdam Hornacek# tr{}{} Transliteration no (but see below) 184*2bcacabbSAdam Hornacek# y{}{} 185*2bcacabbSAdam Hornacek# 186*2bcacabbSAdam Hornacek 187*2bcacabbSAdam Hornacek$s = 'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'; 188*2bcacabbSAdam Hornacek$s = q{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}; 189*2bcacabbSAdam Hornacek$s = q[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]; 190*2bcacabbSAdam Hornacek$s = q(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.); 191*2bcacabbSAdam Hornacek$s = q<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>; 192*2bcacabbSAdam Hornacek$s = q/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 193*2bcacabbSAdam Hornacek$s = q zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z; 194*2bcacabbSAdam Hornacek$s = q#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#; 195*2bcacabbSAdam Hornacek$s = q'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'; 196*2bcacabbSAdam Hornacek$s = q"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."; 197*2bcacabbSAdam Hornacek$s = "pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."; 198*2bcacabbSAdam Hornacek$s = qq{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}; 199*2bcacabbSAdam Hornacek$s = qq[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]; 200*2bcacabbSAdam Hornacek$s = qq(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.); 201*2bcacabbSAdam Hornacek$s = qq<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>; 202*2bcacabbSAdam Hornacek$s = qq/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 203*2bcacabbSAdam Hornacek$s = qq zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z; 204*2bcacabbSAdam Hornacek$s = qq#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#; 205*2bcacabbSAdam Hornacek$s = qq'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'; 206*2bcacabbSAdam Hornacek$s = qq"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."; 207*2bcacabbSAdam Hornacek$s = `pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.`; 208*2bcacabbSAdam Hornacek$s = qx{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}; 209*2bcacabbSAdam Hornacek$s = qx[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]; 210*2bcacabbSAdam Hornacek$s = qx(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.); 211*2bcacabbSAdam Hornacek$s = qx<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>; 212*2bcacabbSAdam Hornacek$s = qx/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 213*2bcacabbSAdam Hornacek$s = qx zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z; 214*2bcacabbSAdam Hornacek$s = qx#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#; 215*2bcacabbSAdam Hornacek$s = qx'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'; 216*2bcacabbSAdam Hornacek$s = qx"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."; 217*2bcacabbSAdam Hornacekuse vars qw{$Cannot %embed &punctuation *here @except $sigils}; 218*2bcacabbSAdam Hornacekuse vars qw[$Cannot %embed &punctuation *here @except $sigils]; 219*2bcacabbSAdam Hornacekuse vars qw($Cannot %embed &punctuation *here @except $sigils); 220*2bcacabbSAdam Hornacekuse vars qw<$Cannot %embed &punctuation *here @except $sigils>; 221*2bcacabbSAdam Hornacekuse vars qw/$Cannot %embed &punctuation *here @except $sigils/; 222*2bcacabbSAdam Hornacekuse vars qw z$Cannot %embed &punctuation *here @except $sigilsz; 223*2bcacabbSAdam Hornacekuse vars qw#$Cannot %embed &punctuation *here @except $sigils#; 224*2bcacabbSAdam Hornacekuse vars qw'$Cannot %embed &punctuation *here @except $sigils'; 225*2bcacabbSAdam Hornacekuse vars qw"$Cannot %embed &punctuation *here @except $sigils"; 226*2bcacabbSAdam Hornacek$s = /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 227*2bcacabbSAdam Hornacek$s = m{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}; 228*2bcacabbSAdam Hornacek$s = m[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]; 229*2bcacabbSAdam Hornacek$s = m(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.); 230*2bcacabbSAdam Hornacek$s = m<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>; 231*2bcacabbSAdam Hornacek$s = m/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 232*2bcacabbSAdam Hornacek$s = m zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z; 233*2bcacabbSAdam Hornacek$s = m#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#; 234*2bcacabbSAdam Hornacek$s = m'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'; 235*2bcacabbSAdam Hornacek$s = m"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."; 236*2bcacabbSAdam Hornacek$s = qr{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}; 237*2bcacabbSAdam Hornacek$s = qr[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]; 238*2bcacabbSAdam Hornacek$s = qr(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.); 239*2bcacabbSAdam Hornacek$s = qr<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>; 240*2bcacabbSAdam Hornacek$s = qr/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./; 241*2bcacabbSAdam Hornacek$s = qr zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z; 242*2bcacabbSAdam Hornacek$s = qr#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#; 243*2bcacabbSAdam Hornacek$s = qr'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'; 244*2bcacabbSAdam Hornacek$s = qr"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."; 245*2bcacabbSAdam Hornacek$s = s{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var. 246*2bcacabbSAdam Hornacek }{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}x; 247*2bcacabbSAdam Hornacek$s = s[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var. 248*2bcacabbSAdam Hornacek ][pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]x; 249*2bcacabbSAdam Hornacek$s = s(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var. 250*2bcacabbSAdam Hornacek )(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.)x; 251*2bcacabbSAdam Hornacek$s = s<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var. 252*2bcacabbSAdam Hornacek ><pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>x; 253*2bcacabbSAdam Hornacek$s = s/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ 254*2bcacabbSAdam Hornacek pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./x; 255*2bcacabbSAdam Hornacek$s = s zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z 256*2bcacabbSAdam Hornacek pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.zx; 257*2bcacabbSAdam Hornacek$s = s#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.# 258*2bcacabbSAdam Hornacek pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#x; 259*2bcacabbSAdam Hornacek$s = s'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.' 260*2bcacabbSAdam Hornacek pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'x; 261*2bcacabbSAdam Hornacek$s = s"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var." 262*2bcacabbSAdam Hornacek pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."x; 263*2bcacabbSAdam Hornacek$s = tr{pP \"\'\(\)\<\>\[\]\/\# fin.}{pP \"\'\(\)\<\>\[\]\/\# fin.}; 264*2bcacabbSAdam Hornacek$s = tr[pP \"\'\(\)\<\>\{\}\/\# fin.][pP \"\'\(\)\<\>\{\}\/\# fin.]; 265*2bcacabbSAdam Hornacek$s = tr(pP \"\'\<\>\{\}\[\]\/\# fin.)(pP \"\'\<\>\{\}\[\]\/\# fin.); 266*2bcacabbSAdam Hornacek$s = tr<pP \"\'\(\)\{\}\[\]\/\# fin.><pP \"\'\(\)\{\}\[\]\/\# fin.>; 267*2bcacabbSAdam Hornacek$s = tr/pP \"\'\(\)\<\>\{\}\[\]\/\# fin./pP \"\'\(\)\<\>\{\}\[\]\/\# fin./; 268*2bcacabbSAdam Hornacek$s = tr zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.z; 269*2bcacabbSAdam Hornacek$s = tr#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#; 270*2bcacabbSAdam Hornacek$s = tr'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.'; 271*2bcacabbSAdam Hornacek$s = tr"pP \"\'\(\)\<\>\{\}\[\]\/\# fin."pP \"\'\(\)\<\>\{\}\[\]\/\# fin."; 272*2bcacabbSAdam Hornacek$s = y{pP \"\'\(\)\<\>\[\]\/\# fin.}{pP \"\'\(\)\<\>\[\]\/\# fin.}; 273*2bcacabbSAdam Hornacek$s = y[pP \"\'\(\)\<\>\{\}\/\# fin.][pP \"\'\(\)\<\>\{\}\/\# fin.]; 274*2bcacabbSAdam Hornacek$s = y(pP \"\'\<\>\{\}\[\]\/\# fin.)(pP \"\'\<\>\{\}\[\]\/\# fin.); 275*2bcacabbSAdam Hornacek$s = y<pP \"\'\(\)\{\}\[\]\/\# fin.><pP \"\'\(\)\{\}\[\]\/\# fin.>; 276*2bcacabbSAdam Hornacek$s = y/pP \"\'\(\)\<\>\{\}\[\]\/\# fin./pP \"\'\(\)\<\>\{\}\[\]\/\# fin./; 277*2bcacabbSAdam Hornacek$s = y zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.z; 278*2bcacabbSAdam Hornacek$s = y#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#; 279*2bcacabbSAdam Hornacek$s = y'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.'; 280*2bcacabbSAdam Hornacek$s = y"pP \"\'\(\)\<\>\{\}\[\]\/\# fin."pP \"\'\(\)\<\>\{\}\[\]\/\# fin."; 281*2bcacabbSAdam Hornacek 282*2bcacabbSAdam Hornacek# more sigiled identifier tests 283*2bcacabbSAdam Hornacekprint "$abc\n${abc}\n", '$abc\n${abc}\n', "\n"; 284*2bcacabbSAdam Hornacek$s = $ {var}; 285*2bcacabbSAdam Hornacek$s = ${ var }; 286*2bcacabbSAdam Hornacekprint qr z$abczix, "\n"; 287*2bcacabbSAdam Hornacekprint $0 if $!; 288*2bcacabbSAdam Hornacekprint $^V; 289*2bcacabbSAdam Hornacekprint "${^GLOBAL_PHASE} is what?"; 290*2bcacabbSAdam Hornacek 291*2bcacabbSAdam Hornacek# more quote-like tests 292*2bcacabbSAdam Hornacekqr{\.[a-z]+$}i; 293*2bcacabbSAdam Hornacek 294*2bcacabbSAdam Hornacek# should back to YYINITIAL after HERE document 295*2bcacabbSAdam Hornacekprint <<EOF; 296*2bcacabbSAdam Hornacek Some text 297*2bcacabbSAdam HornacekEOF 298*2bcacabbSAdam Hornacek/\b sentinel \b/ && print; # This should heuristically match as m// 299*2bcacabbSAdam Hornacek 300*2bcacabbSAdam Hornacek# spaced sigil 301*2bcacabbSAdam Hornacek$ svar = 1; 302*2bcacabbSAdam Hornacek 303*2bcacabbSAdam Hornacek# more quote-like tests 304*2bcacabbSAdam Hornaceks{\.[a-z]+$}{no}i; 305*2bcacabbSAdam Hornacekmy $a = qr$abc$ix; 306*2bcacabbSAdam Hornacek 307*2bcacabbSAdam Hornacek# more POD tests 308*2bcacabbSAdam Hornacek=cut for no purpose 309*2bcacabbSAdam Hornacekprint "1\n"; 310*2bcacabbSAdam Hornacek 311*2bcacabbSAdam Hornacek# POD odd case 312*2bcacabbSAdam Hornacek=ITEM fubar($) 313*2bcacabbSAdam Hornacek=CUT back -- not really though 314*2bcacabbSAdam Hornacekn0n{(sense] 315*2bcacabbSAdam Hornacek=cut back really 316*2bcacabbSAdam Hornacekprint "1\n"; 317*2bcacabbSAdam Hornacek 318*2bcacabbSAdam Hornacek# format FORMLIST tests 319*2bcacabbSAdam Hornacek format STDOUT = 320*2bcacabbSAdam Hornacek@<<<<<< @|||||| @>>>>>> 321*2bcacabbSAdam Hornacek# comment <args to follow> 322*2bcacabbSAdam Hornacek"left", substr($var, 0, 2), "\$right" 323*2bcacabbSAdam Hornacek ... 324*2bcacabbSAdam Hornacek print 325*2bcacabbSAdam Hornacek. 326*2bcacabbSAdam Hornacekprint "1\n"; 327*2bcacabbSAdam Hornacek 328*2bcacabbSAdam Hornacek# some tests for syntax near "s" characters 329*2bcacabbSAdam Hornacekmy $this = {}; 330*2bcacabbSAdam Hornacekif (! -s $this->{filename}) { 331*2bcacabbSAdam Hornacek open UCFILE, "create_file -s $this->{start} -e $this->{end} |" or exit 0; 332*2bcacabbSAdam Hornacek} else { 333*2bcacabbSAdam Hornacek open UCFILE, "$this->{filename}" or exit 0; 334*2bcacabbSAdam Hornacek} 335*2bcacabbSAdam Hornacek 336*2bcacabbSAdam Hornacek# more quote-like tests 337*2bcacabbSAdam Hornacekmy $KK = "b"; 338*2bcacabbSAdam Hornacek$bref = {'b' => 5}; 339*2bcacabbSAdam Hornacek%bhash = ('b' => 6); 340*2bcacabbSAdam Hornacek{ print $bref -> {$KK} / $bhash { $KK }, "$bref->{$KK} $bhash{$KK} $b {\n"; } 341*2bcacabbSAdam Hornacek$bref->{int} = -1 * $bref->{int} / $bref->{a_rate}; # do not infer a m// 342*2bcacabbSAdam Hornacek$bref->{"int"} = -1 * $bref->{"int"} / $bref->{"a_rate"}; # do not infer a m// 343*2bcacabbSAdam Hornacek$var = qq[select t.col 344*2bcacabbSAdam Hornacek from $table 345*2bcacabbSAdam Hornacek where key = $k 346*2bcacabbSAdam Hornacek and k1 = "$r->[0]->[0]" 347*2bcacabbSAdam Hornacek and k2 = "$s->{ code }->{ v }" 348*2bcacabbSAdam Hornacek and k3 = "$t ->[ 0 ]->{ v }" 349*2bcacabbSAdam Hornacek and k4 = "$u ->{ k }->[ 0 ]" 350*2bcacabbSAdam Hornacek order by value_date DESC]; 351*2bcacabbSAdam Hornacekpush @$html, "<TD width=\"20%\">"; 352*2bcacabbSAdam Hornacekprint "%\abc\n", %\, "abc\n"; 353*2bcacabbSAdam Hornacek# some comment 354*2bcacabbSAdam Hornacekpush @arr, "'$key'=>" . 'q[' . $val . '],'; 355*2bcacabbSAdam Hornacek#qq[$var] 356*2bcacabbSAdam Hornacek 357*2bcacabbSAdam Hornacek# more HERE-document tests 358*2bcacabbSAdam Hornacekmyfunc2(<< "THIS", $var, <<~'THAT', $var, <<OTHER, <<\ELSE, <<`Z`); 359*2bcacabbSAdam HornacekHere's a $line1 360*2bcacabbSAdam HornacekTHIS 361*2bcacabbSAdam Hornacek Here's a $line2 362*2bcacabbSAdam Hornacek THAT 363*2bcacabbSAdam HornacekHere's a $line3 364*2bcacabbSAdam HornacekOTHER 365*2bcacabbSAdam HornacekHere's a $line4 366*2bcacabbSAdam HornacekELSE 367*2bcacabbSAdam HornacekHere's a $line5 368*2bcacabbSAdam HornacekHere's a \$line6 369*2bcacabbSAdam HornacekZ 370*2bcacabbSAdam Hornacek/\b sentinel \b/ && print; # This should heuristically match as m// 371*2bcacabbSAdam Hornacek 372*2bcacabbSAdam Hornacek# more quote-like tests 373*2bcacabbSAdam Hornacekfor my $k (grep /=/, split /;/, $d, -1) { 374*2bcacabbSAdam Hornacek print "1\n"; 375*2bcacabbSAdam Hornacek} 376*2bcacabbSAdam Hornacek 377*2bcacabbSAdam Hornacek# more format tests 378*2bcacabbSAdam Hornacek%a = ( 379*2bcacabbSAdam Hornacek format => "%s"); 380*2bcacabbSAdam Hornacek format= 381*2bcacabbSAdam Hornacek@<<<<<< @|||||| @>>>>>> 382*2bcacabbSAdam Hornacek"left", "middle", "right" 383*2bcacabbSAdam Hornacek. 384*2bcacabbSAdam Hornacekprint "1\n"; 385