SlideShare a Scribd company logo
Perl Programming
                 Course
                 Scalar data types




Krasimir Berov

I-can.eu
Contents
1. Perl variables/data types
2. Numeric operators
3. String operators
4. Scalar functions (summary)
5. Undefined quantities
6. Type-casting in Perl?
7. References
Perl variable/data types
Perl has three main variable types:
   –   scalars
   –   arrays
   –   hashes
... Plus two additional:
   –   typeglobs
   –   filehandles
See: perlintro, perldata
Variable names
●   Values are usually referred to by name, or through a
    named reference.
●   The first character tells you to what sort/type of data
    structure it refers ($,@,%).
●   The rest is the name of the particular value to which it
    refers.
●   Usually this name is a single identifier – a string
    beginning with a letter or underscore, and containing
    letters, underscores, and digits.
●   It may be also a chain of identifiers, separated by ::
    (see perlmod/Packages, perlref).
Perl Scalars
●   A scalar can contain a single string (of any size, limited
    only by the available memory), number, or a reference
    to something (see perlref).
●   There are also a number of "magic" scalars with
    names that look like punctuation or line noise ($_, $/,
    $] ...).
    my $animal = "camel";
    my $answer = 22;
    print "Me:    Hello $animal! How old are you?n";
    print "$animal: $answer.$/";
    print '-'x 20, $/;
    print 'Named reference: ',${animal},$/;
    $Other::animal = 'llama';
    print "From package 'Other': $Other::animaln";
    print 'Perl version: ',$], $/;
Perl Arrays
●   Arrays are ordered lists of scalars indexed by
    number, starting with 0.




    my @animals = ("camel", "llama", "пиле");
    my @numbers = (23, 42, 69);
    my @mixed   = ("camel", 42, 1.23);
    print @animals .$/;#what the...;) scalar context
    print "@animals" . $/;#interpolated array
    print "@animals @numbers" . $/;#interpolated arrays
    print @animals, @numbers, $/;#list context
Perl Hashes
●   Hashes are unordered collections of scalar
    values indexed by their associated string key.




    my %fruit_colors = (
        apple => "red",
        banana => "yellow",
    );
    print
        map { "$_ => $fruit_colors{$_}n" }
            sort
                keys %fruit_colors;
    print "%fruit_colorsn"; #hashes can NOT be interpolated
Back to Scalars?!..
Scalar values
●   All data in Perl is a scalar, an array of scalars, or a
    hash of scalars.
●   A scalar may contain one single value which is:
    –   String
    –   Number
    –   Reference (more later)
    –   Filehandle (another time (I/O) )
●   Conversion from one form to another is
    transparent
●   Scalar values are by default undefined.
What are scalars (revisited)
●   A scalar is a single string, number, or a reference
    to something.
●   A scalar value is interpreted as TRUE in the
    Boolean sense if it is not the null string or the
    number 0 (or its string equivalent, "0").


    #try this on the commandline
    >perl -e 'print "truen" if "0" '
    >perl -e 'print "falsen" unless "0" '
    >...
Scalar functions or operators?
●   Many of the built-in functions in Perl are referred
    often to as named operators
●   There are several categories depending on the
    usage, type of manipulated or produced data, etc.
●   For example:
    –   Functions for SCALARs or strings
    –   Numeric functions
    –   Regular expressions and pattern matching...
●   One function/operator may fall in one or more categories
    depending on the context.
Assignment operator
●   The most common operation on a scalar (or
    array, or hash) variable is assignment.
●   This way we give a value to a variable.
●   This way we give a name to a literal value.




    my $name = 'Larry Wall';
    print 'My name is ', $name, $/;
Numeric operators
●   Named operators (functions) that act on numbers
    and produce numbers
    –   abs, hex, oct
Numeric operators
●   abs VALUE
    abs
    Returns the absolute value of its argument. If VALUE
    is omitted, uses $_.
●   See perlfunc/abs



    my $answer = -22;
    print abs $answer;
    print abs "$answer";
Numeric operators
●   hex EXPR
    hex
    Interprets EXPR as a hex string and returns the
    decimal value. (To convert strings that might start with
    either 0, 0x, or 0b, see oct.) If EXPR is omitted, uses
    $_.
●   To present something as hex, look into printf, sprintf, or
    unpack.
●   See perlfunc/hex
    print hex '0xBf';
    print hex 'bF';
Numeric operators
●   oct EXPR
    oct
    Interprets EXPR as an octal string and returns the
    corresponding value.
    –   If EXPR starts off with 0x, interprets it as a hex string.
    –   If EXPR starts off with 0b, it is interpreted as a binary
        string.
    –   Leading whitespace is ignored in all three cases.
    –   If EXPR is omitted, uses $_.
    –   To go the other way (produce a number in octal), use
        sprintf() or printf()
    print(   oct   0b10, $/);
    print(   oct   '0xBf', $/);
    print(   oct   '07', $/);
    print(   oct   '0777', $/);
String operators
●   Named operators (functions) for SCALARs or
    strings
    –   length, chop and chomp, uc/lc
String operators
●   length EXPR
    length
    Returns the length in characters of the value of EXPR.
    –   If EXPR is omitted, returns length of $_.
    –   Cannot be used on an array or hash to find out how
        many elements these have.
    –   For that, use scalar @array and scalar keys %hash
        respectively.
    –   if the EXPR is in Unicode, you will get the number of
        characters, not the number of bytes
    use utf8;
    print( length   'kniga' , $/);
    use bytes;
    print( length   'книга', $/);
    no bytes;
    print( length   'книга', $/);
String operators
●   chop VARIABLE
    chop( LIST )
    chop
    Chops off the last character of a string and returns the character
    chopped.
    –   If VARIABLE is omitted, chops $_.
    –   If VARIABLE is a hash, it chops the hash's values, but
        not its keys.
    –   If you chop a list, each element is chopped. Only the
        value of the last chop is returned.
    #!/usr/bin/perl -C
    #binmode(STDOUT, ':encoding(cp866)');#on win32
    use utf8;
    binmode(STDOUT, ':utf8');
    my ($bob_latin, $bob_cyr) = ('bob', 'боб');
    print( chop($bob_latin) , $/, chop($bob_cyr) , $/);
String operators
●   chomp VARIABLE
    chomp( LIST )
    chomp
    Safer version of chop.
    –   Removes any trailing string that corresponds to the
        current value of $/.
    –   Returns the total number of characters removed
        from all its arguments.
    #binmode(STDOUT, ':encoding(cp866)');#on win32
    use utf8;
    binmode(STDOUT, ':utf8');
    my ($bob_latin, $bob_cyr) = ("bobn", "боб$/");
    print( $bob_latin, $bob_cyr, $/ );
    print( chomp($bob_latin,$bob_cyr) , $/ );
    print( $bob_latin, $bob_cyr, $/ );
String operators
●   lc EXPR
    lc
    Returns a lowercased version of EXPR. If EXPR is
    omitted, uses $_.
●   uc EXPR
    uc
    Returns an uppercased version of EXPR. If EXPR is
    omitted, uses $_.
    #binmode(STDOUT, ':encoding(cp866)');#on win32
    use utf8;
    binmode(STDOUT, ':utf8');
    my ($lcstr, $ucstr) = ("BOBn", "боб$/");
    print( lc $lcstr, uc($ucstr), $/ );
Un/defined quantities
●   undef   => nothing, empty, void
●   defined => something not undef :)
Un/defined quantities
●   undef EXPR
    undef
    Undefines the value of EXPR, which must be an lvalue.
    –   Use only on a scalar value, an array (using @), a hash (using
        %), a subroutine (using &), or a typeglob (using *)...
    –   Always returns the undefined value.



    #use strict; use warnings; use diagnostics;
    my $name;
    print $name ,$/;
    $name ="Larry";
    print $name ,$/;
    undef $name ;
    print $name ,$/;
Un/defined quantities
●   defined EXPR
    defined
    Returns a Boolean value telling whether EXPR has a value other
    than the undefined value undef.

    –   If EXPR is not present, $_ will be checked.
    –   Allows you to distinguish undef from other values.
    –  A simple Boolean test will not distinguish among undef,
       zero, the empty string, and "0", which are all equally
    my false.
       $data;
    print $data if defined($data);
    $data = 0;
    print defined($data);
    print $data if defined($data);
    undef $data;
    print defined($data);
    $_ = 2;
    print defined;
Scalar functions (summary)
●   Functions for SCALARs or strings
    –   chomp, chop, chr, crypt, hex, index, lc, lcfirst,
        length, oct, ord, pack, q//, qq//, reverse, rindex,
        sprintf, substr, tr///, uc, ucfirst, y///
●   Numeric functions
    –   abs, atan2, cos, exp, hex, int, log, oct, rand, sin,
        sqrt, srand
●   Miscellaneous functions
●   defined, dump, eval, formline, local, my, our, reset,
    scalar, undef, wantarray
●   See perlfunc
Type casting operations :X :(
●   C Operators Missing From Perl:
    –   Type-casting operator
    –   ...
●   From perlglossary:
    –   type casting: Converting data from one type to
        another. C permits this. Perl does not need it. Nor
        want it.
●   I hope you have in mind references :)...
References
●   A scallar can also contain a reference.
●   A reference is just a piece of data pointing to another piece of data
    (anonimous or named).
●   In Perl, a reference is always a scalar, although the data it refers to
    may not be
●   Languages like C and C++ have a feature that's similar to references,
    called pointers.
●   Pointers leave interpretation of what's there for the programmer
●   References only store memory locations for specific, clearly defined
    data structures – maybe not predefined, but defined nevertheless.
●   References allow you to leave the arrangement of computer memory to
    the computer itself.
References
●   ref EXPR
    ref
    Returns a non-empty string if EXPR is a reference, the
    empty string otherwise.
    –   If EXPR is not specified, $_ will be used.
    –   The value returned depends on the type of thing the
        reference is a reference to.
    –   Builtin types include:
        SCALAR, ARRAY, HASH, CODE, REF, GLOB, LVALUE,
        FORMAT, IO, Regexp
    –   If the referenced object has been blessed into a
        package, then that package name is returned instead.
    –   You can think of ref as a typeof operator.
References
●   Example
    use Data::Dumper;
    my %hash   = (me =>'you' );
    my @array = ('we',%hash,['them']);
    my $scalar = @array;
    print ref $scalar, $/;
    print $scalar,$/;
    print Dumper($scalar);

●   References will be discussed another time
Scalar data types




Questions?
Exercises
1. Write a program that converts a given hex digit to decimal
   and displays it on the screen.
2. Write a program which displays the absolute of a negative
   number.
3. Write a program which removes the last letter from a string
   (no matter what the string is) and displays the letter on the
   screen.
4. Write a program which converts a number to its
   corresponding character and displays the letter on the
   screen.
5. Write a program which prints the string 'Здрасти' 3 times on
   3 separate lines using only one print statement.
Ad

More Related Content

What's hot (20)

BLAST AND FASTA.pptx
BLAST AND FASTA.pptxBLAST AND FASTA.pptx
BLAST AND FASTA.pptx
PiyushBehgal1
 
Data Retrieval Systems
Data Retrieval SystemsData Retrieval Systems
Data Retrieval Systems
Saramita De Chakravarti
 
Sequence file formats
Sequence file formatsSequence file formats
Sequence file formats
Alphonsa Joseph
 
Multiple sequence alignment
Multiple sequence alignmentMultiple sequence alignment
Multiple sequence alignment
Ramya S
 
Multiple alignment
Multiple alignmentMultiple alignment
Multiple alignment
avrilcoghlan
 
Fasta
FastaFasta
Fasta
university of education,Lahore
 
Structure analysis of protein
Structure analysis of proteinStructure analysis of protein
Structure analysis of protein
KAUSHAL SAHU
 
Introduction to databases.pptx
Introduction to databases.pptxIntroduction to databases.pptx
Introduction to databases.pptx
sworna kumari chithiraivelu
 
ENTREZ.ppt
ENTREZ.pptENTREZ.ppt
ENTREZ.ppt
kishoreGupta17
 
Blast and fasta
Blast and fastaBlast and fasta
Blast and fasta
ALLIENU
 
Microarray Data Analysis
Microarray Data AnalysisMicroarray Data Analysis
Microarray Data Analysis
yuvraj404
 
Sequence database
Sequence databaseSequence database
Sequence database
Dr.M.Prasad Naidu
 
Protein Databases
Protein DatabasesProtein Databases
Protein Databases
SATHIYA NARAYANAN
 
UniProt
UniProtUniProt
UniProt
AmnaA7
 
Bioinformatics and BioPerl
Bioinformatics and BioPerlBioinformatics and BioPerl
Bioinformatics and BioPerl
Jason Stajich
 
Genomic databases
Genomic databasesGenomic databases
Genomic databases
Thapar Institute of Engineering & Technology, Patiala, Punjab, India
 
Ddbj
DdbjDdbj
Ddbj
Bioinformatics15
 
Introduction to Perl and BioPerl
Introduction to Perl and BioPerlIntroduction to Perl and BioPerl
Introduction to Perl and BioPerl
Bioinformatics and Computational Biosciences Branch
 
PAM : Point Accepted Mutation
PAM : Point Accepted MutationPAM : Point Accepted Mutation
PAM : Point Accepted Mutation
Amit Kyada
 
Biopython
BiopythonBiopython
Biopython
bosc
 

Similar to Scalar data types (20)

Introduction to perl_lists
Introduction to perl_listsIntroduction to perl_lists
Introduction to perl_lists
Vamshi Santhapuri
 
Lists and arrays
Lists and arraysLists and arrays
Lists and arrays
Krasimir Berov (Красимир Беров)
 
Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01Barcelona.pm Curs1211 sess01
Barcelona.pm Curs1211 sess01
Javier Arturo Rodríguez
 
Our Friends the Utils: A highway traveled by wheels we didn't re-invent.
Our Friends the Utils: A highway traveled by wheels we didn't re-invent. Our Friends the Utils: A highway traveled by wheels we didn't re-invent.
Our Friends the Utils: A highway traveled by wheels we didn't re-invent.
Workhorse Computing
 
Introduction to perl_control structures
Introduction to perl_control structuresIntroduction to perl_control structures
Introduction to perl_control structures
Vamshi Santhapuri
 
newperl5
newperl5newperl5
newperl5
tutorialsruby
 
newperl5
newperl5newperl5
newperl5
tutorialsruby
 
Scripting3
Scripting3Scripting3
Scripting3
Nao Dara
 
Intoduction to php strings
Intoduction to php  stringsIntoduction to php  strings
Intoduction to php strings
baabtra.com - No. 1 supplier of quality freshers
 
Unit 1-array,lists and hashes
Unit 1-array,lists and hashesUnit 1-array,lists and hashes
Unit 1-array,lists and hashes
sana mateen
 
Introduction to perl scripting______.ppt
Introduction to perl scripting______.pptIntroduction to perl scripting______.ppt
Introduction to perl scripting______.ppt
nalinisamineni
 
Perl Introduction
Perl IntroductionPerl Introduction
Perl Introduction
Marcos Rebelo
 
Cs3430 lecture 16
Cs3430 lecture 16Cs3430 lecture 16
Cs3430 lecture 16
Tanwir Zaman
 
Perl Basics with Examples
Perl Basics with ExamplesPerl Basics with Examples
Perl Basics with Examples
Nithin Kumar Singani
 
Php basics
Php basicsPhp basics
Php basics
hamfu
 
Perl names values and variables
Perl names values and variablesPerl names values and variables
Perl names values and variables
sana mateen
 
Unit 1-perl names values and variables
Unit 1-perl names values and variablesUnit 1-perl names values and variables
Unit 1-perl names values and variables
sana mateen
 
PERL.ppt
PERL.pptPERL.ppt
PERL.ppt
Farmood Alam
 
perl_lessons
perl_lessonsperl_lessons
perl_lessons
tutorialsruby
 
perl_lessons
perl_lessonsperl_lessons
perl_lessons
tutorialsruby
 
Ad

More from Krasimir Berov (Красимир Беров) (14)

Хешове
ХешовеХешове
Хешове
Krasimir Berov (Красимир Беров)
 
Списъци и масиви
Списъци и масивиСписъци и масиви
Списъци и масиви
Krasimir Berov (Красимир Беров)
 
Скаларни типове данни
Скаларни типове данниСкаларни типове данни
Скаларни типове данни
Krasimir Berov (Красимир Беров)
 
Въведение в Perl
Въведение в PerlВъведение в Perl
Въведение в Perl
Krasimir Berov (Красимир Беров)
 
System Programming and Administration
System Programming and AdministrationSystem Programming and Administration
System Programming and Administration
Krasimir Berov (Красимир Беров)
 
Network programming
Network programmingNetwork programming
Network programming
Krasimir Berov (Красимир Беров)
 
Processes and threads
Processes and threadsProcesses and threads
Processes and threads
Krasimir Berov (Красимир Беров)
 
Working with databases
Working with databasesWorking with databases
Working with databases
Krasimir Berov (Красимир Беров)
 
Working with text, Regular expressions
Working with text, Regular expressionsWorking with text, Regular expressions
Working with text, Regular expressions
Krasimir Berov (Красимир Беров)
 
Subroutines
SubroutinesSubroutines
Subroutines
Krasimir Berov (Красимир Беров)
 
IO Streams, Files and Directories
IO Streams, Files and DirectoriesIO Streams, Files and Directories
IO Streams, Files and Directories
Krasimir Berov (Красимир Беров)
 
Syntax
SyntaxSyntax
Syntax
Krasimir Berov (Красимир Беров)
 
Hashes
HashesHashes
Hashes
Krasimir Berov (Красимир Беров)
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
Krasimir Berov (Красимир Беров)
 
Ad

Recently uploaded (20)

Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 

Scalar data types

  • 1. Perl Programming Course Scalar data types Krasimir Berov I-can.eu
  • 2. Contents 1. Perl variables/data types 2. Numeric operators 3. String operators 4. Scalar functions (summary) 5. Undefined quantities 6. Type-casting in Perl? 7. References
  • 3. Perl variable/data types Perl has three main variable types: – scalars – arrays – hashes ... Plus two additional: – typeglobs – filehandles See: perlintro, perldata
  • 4. Variable names ● Values are usually referred to by name, or through a named reference. ● The first character tells you to what sort/type of data structure it refers ($,@,%). ● The rest is the name of the particular value to which it refers. ● Usually this name is a single identifier – a string beginning with a letter or underscore, and containing letters, underscores, and digits. ● It may be also a chain of identifiers, separated by :: (see perlmod/Packages, perlref).
  • 5. Perl Scalars ● A scalar can contain a single string (of any size, limited only by the available memory), number, or a reference to something (see perlref). ● There are also a number of "magic" scalars with names that look like punctuation or line noise ($_, $/, $] ...). my $animal = "camel"; my $answer = 22; print "Me: Hello $animal! How old are you?n"; print "$animal: $answer.$/"; print '-'x 20, $/; print 'Named reference: ',${animal},$/; $Other::animal = 'llama'; print "From package 'Other': $Other::animaln"; print 'Perl version: ',$], $/;
  • 6. Perl Arrays ● Arrays are ordered lists of scalars indexed by number, starting with 0. my @animals = ("camel", "llama", "пиле"); my @numbers = (23, 42, 69); my @mixed = ("camel", 42, 1.23); print @animals .$/;#what the...;) scalar context print "@animals" . $/;#interpolated array print "@animals @numbers" . $/;#interpolated arrays print @animals, @numbers, $/;#list context
  • 7. Perl Hashes ● Hashes are unordered collections of scalar values indexed by their associated string key. my %fruit_colors = ( apple => "red", banana => "yellow", ); print map { "$_ => $fruit_colors{$_}n" } sort keys %fruit_colors; print "%fruit_colorsn"; #hashes can NOT be interpolated
  • 9. Scalar values ● All data in Perl is a scalar, an array of scalars, or a hash of scalars. ● A scalar may contain one single value which is: – String – Number – Reference (more later) – Filehandle (another time (I/O) ) ● Conversion from one form to another is transparent ● Scalar values are by default undefined.
  • 10. What are scalars (revisited) ● A scalar is a single string, number, or a reference to something. ● A scalar value is interpreted as TRUE in the Boolean sense if it is not the null string or the number 0 (or its string equivalent, "0"). #try this on the commandline >perl -e 'print "truen" if "0" ' >perl -e 'print "falsen" unless "0" ' >...
  • 11. Scalar functions or operators? ● Many of the built-in functions in Perl are referred often to as named operators ● There are several categories depending on the usage, type of manipulated or produced data, etc. ● For example: – Functions for SCALARs or strings – Numeric functions – Regular expressions and pattern matching... ● One function/operator may fall in one or more categories depending on the context.
  • 12. Assignment operator ● The most common operation on a scalar (or array, or hash) variable is assignment. ● This way we give a value to a variable. ● This way we give a name to a literal value. my $name = 'Larry Wall'; print 'My name is ', $name, $/;
  • 13. Numeric operators ● Named operators (functions) that act on numbers and produce numbers – abs, hex, oct
  • 14. Numeric operators ● abs VALUE abs Returns the absolute value of its argument. If VALUE is omitted, uses $_. ● See perlfunc/abs my $answer = -22; print abs $answer; print abs "$answer";
  • 15. Numeric operators ● hex EXPR hex Interprets EXPR as a hex string and returns the decimal value. (To convert strings that might start with either 0, 0x, or 0b, see oct.) If EXPR is omitted, uses $_. ● To present something as hex, look into printf, sprintf, or unpack. ● See perlfunc/hex print hex '0xBf'; print hex 'bF';
  • 16. Numeric operators ● oct EXPR oct Interprets EXPR as an octal string and returns the corresponding value. – If EXPR starts off with 0x, interprets it as a hex string. – If EXPR starts off with 0b, it is interpreted as a binary string. – Leading whitespace is ignored in all three cases. – If EXPR is omitted, uses $_. – To go the other way (produce a number in octal), use sprintf() or printf() print( oct 0b10, $/); print( oct '0xBf', $/); print( oct '07', $/); print( oct '0777', $/);
  • 17. String operators ● Named operators (functions) for SCALARs or strings – length, chop and chomp, uc/lc
  • 18. String operators ● length EXPR length Returns the length in characters of the value of EXPR. – If EXPR is omitted, returns length of $_. – Cannot be used on an array or hash to find out how many elements these have. – For that, use scalar @array and scalar keys %hash respectively. – if the EXPR is in Unicode, you will get the number of characters, not the number of bytes use utf8; print( length 'kniga' , $/); use bytes; print( length 'книга', $/); no bytes; print( length 'книга', $/);
  • 19. String operators ● chop VARIABLE chop( LIST ) chop Chops off the last character of a string and returns the character chopped. – If VARIABLE is omitted, chops $_. – If VARIABLE is a hash, it chops the hash's values, but not its keys. – If you chop a list, each element is chopped. Only the value of the last chop is returned. #!/usr/bin/perl -C #binmode(STDOUT, ':encoding(cp866)');#on win32 use utf8; binmode(STDOUT, ':utf8'); my ($bob_latin, $bob_cyr) = ('bob', 'боб'); print( chop($bob_latin) , $/, chop($bob_cyr) , $/);
  • 20. String operators ● chomp VARIABLE chomp( LIST ) chomp Safer version of chop. – Removes any trailing string that corresponds to the current value of $/. – Returns the total number of characters removed from all its arguments. #binmode(STDOUT, ':encoding(cp866)');#on win32 use utf8; binmode(STDOUT, ':utf8'); my ($bob_latin, $bob_cyr) = ("bobn", "боб$/"); print( $bob_latin, $bob_cyr, $/ ); print( chomp($bob_latin,$bob_cyr) , $/ ); print( $bob_latin, $bob_cyr, $/ );
  • 21. String operators ● lc EXPR lc Returns a lowercased version of EXPR. If EXPR is omitted, uses $_. ● uc EXPR uc Returns an uppercased version of EXPR. If EXPR is omitted, uses $_. #binmode(STDOUT, ':encoding(cp866)');#on win32 use utf8; binmode(STDOUT, ':utf8'); my ($lcstr, $ucstr) = ("BOBn", "боб$/"); print( lc $lcstr, uc($ucstr), $/ );
  • 22. Un/defined quantities ● undef => nothing, empty, void ● defined => something not undef :)
  • 23. Un/defined quantities ● undef EXPR undef Undefines the value of EXPR, which must be an lvalue. – Use only on a scalar value, an array (using @), a hash (using %), a subroutine (using &), or a typeglob (using *)... – Always returns the undefined value. #use strict; use warnings; use diagnostics; my $name; print $name ,$/; $name ="Larry"; print $name ,$/; undef $name ; print $name ,$/;
  • 24. Un/defined quantities ● defined EXPR defined Returns a Boolean value telling whether EXPR has a value other than the undefined value undef. – If EXPR is not present, $_ will be checked. – Allows you to distinguish undef from other values. – A simple Boolean test will not distinguish among undef, zero, the empty string, and "0", which are all equally my false. $data; print $data if defined($data); $data = 0; print defined($data); print $data if defined($data); undef $data; print defined($data); $_ = 2; print defined;
  • 25. Scalar functions (summary) ● Functions for SCALARs or strings – chomp, chop, chr, crypt, hex, index, lc, lcfirst, length, oct, ord, pack, q//, qq//, reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y/// ● Numeric functions – abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand ● Miscellaneous functions ● defined, dump, eval, formline, local, my, our, reset, scalar, undef, wantarray ● See perlfunc
  • 26. Type casting operations :X :( ● C Operators Missing From Perl: – Type-casting operator – ... ● From perlglossary: – type casting: Converting data from one type to another. C permits this. Perl does not need it. Nor want it. ● I hope you have in mind references :)...
  • 27. References ● A scallar can also contain a reference. ● A reference is just a piece of data pointing to another piece of data (anonimous or named). ● In Perl, a reference is always a scalar, although the data it refers to may not be ● Languages like C and C++ have a feature that's similar to references, called pointers. ● Pointers leave interpretation of what's there for the programmer ● References only store memory locations for specific, clearly defined data structures – maybe not predefined, but defined nevertheless. ● References allow you to leave the arrangement of computer memory to the computer itself.
  • 28. References ● ref EXPR ref Returns a non-empty string if EXPR is a reference, the empty string otherwise. – If EXPR is not specified, $_ will be used. – The value returned depends on the type of thing the reference is a reference to. – Builtin types include: SCALAR, ARRAY, HASH, CODE, REF, GLOB, LVALUE, FORMAT, IO, Regexp – If the referenced object has been blessed into a package, then that package name is returned instead. – You can think of ref as a typeof operator.
  • 29. References ● Example use Data::Dumper; my %hash = (me =>'you' ); my @array = ('we',%hash,['them']); my $scalar = @array; print ref $scalar, $/; print $scalar,$/; print Dumper($scalar); ● References will be discussed another time
  • 31. Exercises 1. Write a program that converts a given hex digit to decimal and displays it on the screen. 2. Write a program which displays the absolute of a negative number. 3. Write a program which removes the last letter from a string (no matter what the string is) and displays the letter on the screen. 4. Write a program which converts a number to its corresponding character and displays the letter on the screen. 5. Write a program which prints the string 'Здрасти' 3 times on 3 separate lines using only one print statement.