PerlHash
public final class PerlHash : PerlValue
Provides a safe wrapper for Perl hash (HV).
Performs reference counting on initialization and deinitialization.
Cheat Sheet
Creating of a hash
my %hash = (
id => 42,
name => "Иван",
aliases => ["Ваня", "John"],
);
let hash: PerlHash = [
"id": 42,
"name": "Иван",
"aliases": ["Ваня", "John"],
]
Accessing a hash
$hash{age} = 10;
my $age = $hash{age};
delete $hash{age};
my $has_age = exists $hash{age};
$hash{age} = undef;
hash["age"] = 10
let age = hash["age"] ?? PerlScalar()
hash["age"] = nil
let hasAge = hash["age"] != nil
hash["age"] = PerlScalar()
The difference between Perl and Swift hash element access APIs is the result of
Swiftification. It was done to make subscript behavior match behavior of
subscripts in Dictionary. So, when a key does not exist subscript returns
nil not an undefined SV as a Perl programmer could expect.
-
Creates an empty Perl hash.
Declaration
Swift
public convenience init() -
Creates an empty Perl hash.
Declaration
Swift
public convenience init(perl: PerlInterpreter = .current) -
Initializes a new Perl hash with elements of dictionary
dict, recursively converting them to Perl scalars.Values can be simple scalars:
let dict = ["one": 1, "two": 2, "three": 3] let hv = PerlHash(dict) // my %hv = (one => 1, two => 2, three => 3);More then that arrays, dictionaries, references and objects are also possible:
let dict = ["odd": [1, 3], "even": [2, 4]] let hv = PerlHash(dict) // my %hv = (odd => [1, 3], even => [2, 4]);Declaration
Swift
public convenience init<T : PerlScalarConvertible>(_ dict: [String: T])Parameters
dicta dictionary with
Stringkeys and values convertible to Perl scalars (conforming toPerlScalarConvertible). -
Short form of
init(dereferencing:).Declaration
Swift
public convenience init(_ ref: PerlScalar) throws -
Returns the specified Perl global or package hash with the given name (so it won’t work on lexical variables). If the variable does not exist then
nilis returned.Declaration
Swift
public convenience init?(get name: String, perl: PerlInterpreter = .current) -
Returns the specified Perl global or package hash with the given name (so it won’t work on lexical variables). If the variable does not exist then it will be created.
Declaration
Swift
public convenience init(getCreating name: String, perl: PerlInterpreter = .current) -
A textual representation of the HV, suitable for debugging.
Declaration
Swift
public override var debugDescription: String
-
Fetches the value associated with the given key.
Declaration
Swift
public func fetch<T : PerlScalarConvertible>(_ key: String) throws -> T?Parameters
keyThe key to find in the hash.
Return Value
The value associated with
keyifkeyis in the hash; otherwise,nil. -
Stores the value in the hash for the given key.
Declaration
Swift
public func store<T : PerlScalarConvertible>(key: String, value: T)Parameters
keyThe key to associate with
value.valueThe value to store in the hash.
-
Deletes the given key and its associated value from the hash.
Declaration
Swift
public func delete<T : PerlScalarConvertible>(_ key: String) throws -> T?Parameters
keyThe key to remove along with its associated value.
Return Value
The value that was removed, or
nilif the key was not found in the hash. -
Deletes the given key and its associated value from the hash.
Declaration
Swift
public func delete(_ key: String) -
Returns a boolean indicating whether the specified hash key exists.
Declaration
Swift
public func exists(_ key: String) -> Bool -
Fetches the value associated with the given key.
Declaration
Swift
public func fetch<T : PerlScalarConvertible>(_ key: PerlScalar) throws -> T?Parameters
keyThe key to find in the hash.
Return Value
The value associated with
keyifkeyis in the hash; otherwise,nil. -
Stores the value in the hash for the given key.
Declaration
Swift
public func store<T : PerlScalarConvertible>(key: PerlScalar, value: T)Parameters
keyThe key to associate with
value.valueThe value to store in the hash.
-
Deletes the given key and its associated value from the hash.
Declaration
Swift
public func delete<T : PerlScalarConvertible>(_ key: PerlScalar) throws -> T?Parameters
keyThe key to remove along with its associated value.
Return Value
The value that was removed, or
nilif the key was not found in the hash. -
Deletes the given key and its associated value from the hash.
Declaration
Swift
public func delete(_ key: PerlScalar) -
Returns a boolean indicating whether the specified hash key exists.
Declaration
Swift
public func exists(_ key: PerlScalar) -> Bool -
Frees the all the elements of a hash, leaving it empty.
Declaration
Swift
public func clear()
-
Returns an iterator over the elements of this hash.
PerlHashconforms toIteratorProtocolitself. So a returned value is alwaysself. Behind the scenes it calls Perl macrohv_iterinitand prepares a starting point to traverse the hash table.Attention
Only one iterator is possible at any time.See also
SequenceDeclaration
Swift
public func makeIterator() -> PerlHashReturn Value
self -
Advances to the next element and returns it, or
nilif no next element exists.Once
nilhas been returned, all subsequent calls returnnil.See also
IteratorProtocolDeclaration
Swift
public func next() -> Element? -
Accesses the value associated with the given key for reading and writing.
This key-based subscript returns the value for the given key if the key is found in the hash, or
nilif the key is not found.When you assign a value for a key and that key already exists, the hash overwrites the existing value. If the hash doesn’t contain the key, the key and value are added as a new key-value pair.
If you assign
nilas the value for the given key, the hash removes that key and its associated value.See also
DictionaryDeclaration
Swift
public subscript(key: Key) -> PerlScalar?Parameters
keyThe key to find in the hash.
Return Value
The value associated with
keyifkeyis in the hash; otherwise,nil. -
Accesses the value associated with the given key for reading and writing.
This key-based subscript returns the value for the given key if the key is found in the hash, or
nilif the key is not found.When you assign a value for a key and that key already exists, the hash overwrites the existing value. If the hash doesn’t contain the key, the key and value are added as a new key-value pair.
If you assign
nilas the value for the given key, the hash removes that key and its associated value.See also
DictionaryDeclaration
Swift
public subscript(key: PerlScalar) -> PerlScalar?Parameters
keyThe key to find in the hash.
Return Value
The value associated with
keyifkeyis in the hash; otherwise,nil.
-
Creates a Perl hash from a Swift dictionary.
Declaration
Swift
public convenience init(_ dict: [Key: Value]) -
Creates a Perl hash from a Swift array of key/value tuples.
Declaration
Swift
public convenience init(_ elements: [(Key, Value)])
-
Creates a Perl hash initialized with a dictionary literal.
Do not call this initializer directly. It is called by the compiler to handle dictionary literals. To use a dictionary literal as the initial value of a hash, enclose a comma-separated list of key-value pairs in square brackets. For example:
let header: PerlHash = [ "Content-Length": 320, "Content-Type": "application/json" ]See also
ExpressibleByDictionaryLiteralDeclaration
Swift
public convenience init(dictionaryLiteral elements: (Key, Value)...)Parameters
elementsThe key-value pairs that will make up the new dictionary. Each key in
elementsmust be unique.
View on GitHub
PerlHash Class Reference